2013-01-04 19 views
8

मुझे एक PHP कतार प्रणाली बनाना था, और यह शानदार लेख http://squirrelshaterobots.com/programming/php/building-a-queue-server-in-php-part-1-understanding-the-project/ पाया और मैंने इसे PHP कतार प्रणाली बनाने के लिए उपयोग किया, यह सेट अप और उपयोग करने में बहुत आसान था।एक PHP कतार प्रणाली कैसे बनाएं

नीचे पंक्ति (puTTy या somesuch) से चलाने queue.php के लिए कोड है।

<?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(); 

} 

?> 

सबसे कठिन हिस्सा मेरे सर्वर पर काम करने के लिए पीसीएनटीएल कार्यों को प्राप्त कर रहा था।

मेरा सवाल है "सर्वर को पुनरारंभ करने के लिए स्वचालित रूप से प्रारंभ करने के लिए मुझे नौकरी कैसे मिलती है?"

+1

आपका प्रश्न क्या है, ठीक है, _is_ आपका प्रश्न? –

+1

@MartinBean सर्वर को पुनरारंभ करने के लिए स्वचालित रूप से प्रारंभ करने के लिए मुझे नौकरी कैसे मिलती है? –

+1

आप ऐसा करने के लिए सर्वर प्रारंभ स्क्रिप्ट को संशोधित कर सकते हैं, या आप स्क्रिप्ट जोड़ सकते हैं जो स्क्रिप्ट/सर्वर की स्थिति और नौकरी को पुनरारंभ करने के लिए दूसरी स्क्रिप्ट की रिपोर्ट करेगा और फिर उन्हें स्थानीय/दूरस्थ होस्ट से सर्वर/पुनरारंभ करने के लिए दोनों का उपयोग करें (cronjob के साथ) – llamerr

उत्तर

9

मेरा सवाल है "सर्वर को पुनरारंभ करने के लिए स्वचालित रूप से प्रारंभ करने के लिए मुझे नौकरी कैसे मिलती है?"

सर्वर शुरू होने पर शुरू की गई चीज़ों की सूची में इसे जोड़कर। दुर्भाग्य से ऑपरेटिंग सिस्टम और ओएस संस्करण द्वारा ऐसा करने के लिए निर्देश जंगली रूप से भिन्न होते हैं। आप शायद कुछ और क्रॉस-प्लेटफॉर्म का उपयोग करना चाहते हैं। मेरे पास supervisor के साथ भाग्य का एक बड़ा सौदा है, जिसे आप शायद अपने पसंद के ओएस पर पैकेज रेपो में पा सकते हैं।

उसने कहा, आप पागलपन के मार्ग पर जा रहे हैं। जो चीज आप कर रहे हैं वह पहले से ही अद्भुत लोगों द्वारा किया जा चुका है। Gearman कार्य कतार प्रणाली और साथ में PECL extension देखें। ऐसा होता है कि पर्यवेक्षक आपके गियरमैन श्रमिकों को भी जिंदा रखने के लिए बहुत आसान है।

संबंधित मुद्दे