I had to build a PHP Queue System, and found this brilliant article
http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-1-understanding-the-project
Below is the code for queue.php, run from shell (puTTy or somesuch).
<?PHP 
//. set this constant to false if we ever need to debug
//. the application in a terminal.
define('QUEUESERVER_FORK', true);
//////// fork into a background process ////////
if(QUEUESERVER_FORK){    
    $pid = pcntl_fork(); 
    if($pid === -1) die('error: unable to fork.');    
    else if($pid) exit(0);        
    posix_setsid();    
    sleep(1);        
    ob_start();
}
$queue = array();
//////// setup our named pipe ////////
$pipefile = '/tmp/queueserver-input';
if(file_exists($pipefile))    
    if(!unlink($pipefile))         
        die('unable to remove stale file');
umask(0);
if(!posix_mkfifo($pipefile, 0666))    
    die('unable to create named pipe');
$pipe = fopen($pipefile,'r+');
if(!$pipe) die('unable to open the named pipe');
stream_set_blocking($pipe, false);
//////// process the queue ////////
while(1){    
    while($input = trim(fgets($pipe))){        
        stream_set_blocking($pipe, false);        
        $queue[] = $input;    
    }    
    $job = current($queue);    
    $jobkey = key($queue);    
    if($job){        
        echo 'processing job ', $job, PHP_EOL;                
        process($job);                
        next($queue);        
        unset($job, $queue[$jobkey]);            
    }else{        
        echo 'no jobs to do - waiting...', PHP_EOL;        
        stream_set_blocking($pipe, true);    
    }        
    if(QUEUESERVER_FORK) ob_clean();
}
?>
The hardest part was getting the pcntl functions to work on my server.
My question is "How do i get the job to start automatically when/if the server has to restart?"
As noted in comments, edited broken link and pointed to excellent web archive for posterity.
 
     
    