Heim > Backend-Entwicklung > PHP-Tutorial > PHP erhält den Implementierungscode der Hintergrundjobverwaltung

PHP erhält den Implementierungscode der Hintergrundjobverwaltung

高洛峰
Freigeben: 2023-03-01 11:20:01
Original
981 Leute haben es durchsucht

复制代码 代码如下: 
Klasse Controller_Jobs erweitert Controller_Base{ 
öffentliche Funktion before(){ 
parent::before(); 
if(Request::$protocol != "cli"){ 
die("Nur cli erlaubt!n"); 


public function after(){ 
parent::after(); 
//einige Reinigungsaufgaben erledigen 

private function _execJobCommand($joburi,$paras){ 
$php_exec = Kohana::config("picsou.php_exec"); 
$php_index = APPINDEX; 
$command_args = array(); 
$command_args[] = $php_index; 
$command_args[] = "--uri=".$joburi; 
foreach ($paras as $para => $value){ 
$command_args[] = "--".$para."=".$value; 

//var_dump($command_args);exit; 
echo „exec command:“.$php_exec.“n“; 
pcntl_exec($php_exec,$command_args); 

/* 
* Jobs in Warteschlangen ausführen 
*/ 
public function action_run(){ 
$requestCount = 0; 
while(true){ 
$sql = "wählen Sie * aus der Jobwarteschlange aus, wobei Status='1' und genehmigt='1' nach ID sortiert sind"; 
$jobs = DB::query(Database::SELECT,$sql)->execute()->as_array(); 
if($jobs){ 
foreach ($jobs as $job){ 
$requestCount ++; 
//Aktualisieren Sie den Auftragsstatus als ausgeführt 
DB::update('job_queue')->set(array('status'=>'2')) 
->where(' id','=',$job['id'])->execute(); 
$job_pid = pcntl_fork(); 
if($job_pid == -1){ 
die("Child konnte nicht geforkt werden"); 
} else if($job_pid == 0 ){ 
$this->_execJobCommand($job['job_uri'],json_decode($job['paras'],true)); 
Echo „Beende Childn“; 
exit(0); 
//Jobs hier ausführen 
} else{ 
echo „Waiting for jobn“; 
ob_flush(); 
$child_pid = pcntl_waitpid($job_pid,$status, WUNTRACED); 
echo „waitpid end:“.$status.“n“; 
if($status == 0){ 
//Job abgeschlossen 
DB::update('job_queue')->set(array('status'=>'999')) 
->where('id','=',$job['id'])->execute(); 
echo „Child Finishedn“; 
ob_flush(); 
}else{ 
DB::update('job_queue')->set(array('status'=>'-1')) 
->where('id',' =',$job['id'])->execute(); 
echo „Child Failedn“; 
ob_flush(); 




else{ 
if($requestCount >=10){ 
echo „Ruhe dich aus, ich habe 10 Jobs bearbeitet“; 
Ausgang; 

//Kein Job zum Ausführen 
//echo „No jobn“; 
ob_flush(); 
schlafen(5); 



Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage