task1.php
<?phpののerror_reporting(E_ERROR | E_WARNING | E_PARSE )。 // Redisの $のRedis = 新しいRedisの(); $ Redisの - > pconnect(REDIS_HOST、REDIS_PORT)。 $ Redisの - > AUTH(REDIS_PASS)。 // タスク 間(真){ $タスク = $のRedis - > RPOP( 'mytask1' ); 場合($タスク!== falseの){ //はTODO 続けます。 } 睡眠(1); } ?>
task_monitor.php
<PHP?するerror_reporting(E_ERROR | E_WARNING | E_PARSEを); // タスクの配列 $タスク = アレイ( 'task1.php'、 'task2.php'、 'task3.php'、 'task4.php'、 'task5.php' ); // 実行中のタスクの検索 $ CMD = "PS -ef | grepの'タスク'を" ; $ RES = もしくはshell_exec($ cmdを); $すべては = 爆発、 "\ N-"($ RES ;) $ランニング = アレイ(); 以下のための(私は$ = 0; 私は$ < 数($すべて)。私は$ ++ ){ $配列は = 爆発、( "PHPを" $すべて [ $ I )]。 $ P = トリム($配列 [1 ])。 もし(!空($ P )){ $ P = str_replace( '/ MYTASK /'、 ''、$ P ); 実行している$ [] = $ P ; } } エコー(日付( 'はYmd H:I:S')。 "\ n"は); $のDATE = DATE( 'YmdHis' ); //は、タスクが実行されていない見つけ、タスクを開始 するために($ I = 0; $ I < COUNT($タスク); $ I ++ ){ IF(in_array($タスク [ $ I ]、$ランニング)){ エコー($タスク [ $ I "実行されている\ N-"。] ); } 他{ エコー($タスク [ $ I。] "デッドは\ N-" ); $ CMD = "nohupはは/ usr / bin / php / MYTASK /"。$タスク [ $ I ] "> /mytask/nohup/mytask.log 2>&1&"。; $ RES = もしくはshell_exec($ CMD )。 } } エコー( "\ n"); ?>