PHP pcntl скрипт - нужно руководство - PullRequest
0 голосов
/ 18 октября 2011

Я работаю над проектом очистки, где-то в приложении мне нужна эта функциональность

запускать скрипт снова и снова с паузой в несколько секунд.

Я пытался использовать pcntl для выполнения этой работы. так написал этот скрипт

/************************/
$intra_sleep=10; // we're going to set the intra process launch sleep at 10 seconds
$task_process=null; // by default this is set to null -- do nothing
$loop_limit=0; // this is the number of times the loop shoul run -- if set to -1 look infinite number of times

if (isset($argv[1])) $task_process=$argv[1];
if (isset($argv[2])) $intra_sleep=$argv[2];
if (isset($argv[3])) $loop_limit=$argv[3];


for ($loop_count=0; $loop_limit==-1 ? true : $loop_count< $loop_limit; $loop_count++) 
{
  $pid= pcntl_fork();

   if ($pid == -1) 
   {
    die('MASTER: could not fork');
   } 
   else if ($pid==0) 
   {
     if ($task_process) 
     { 
       echo "Sleeping for  $intra_sleep Seconds\n"; 
       sleep($intra_sleep);
       echo "Launching Child \n\n"; 
       exec($task_process); // from here process script is being launched
     } 
     else 
     {
    echo "  CLONE: no task process defined -- doing nothing " . PHP_EOL;
     }
  } 
  else 
  {
     pcntl_waitpid($pid,$status);  
  } 


}

/*********************/

Я так называю этот скрипт из CLI

nohup php /this/script.php "php /path/to/process.php" 10 -1

Я ожидаю, что process.php будет запускаться снова и снова с 10-секундными интервалами. Это делало то, что я ожидал, но когда я проверял запущенные процессы, запускались тысячи запущенных этим скриптом.

Мое требование очень простое: скрипт должен запускаться снова и снова с 10-секундной паузой.

1 Ответ

1 голос
/ 18 октября 2011

Если вы просто хотите повторять PHP-скрипт каждые x секунд, то вы можете использовать Fat Controller для обработки всех процессов демонтажа и запуска скриптов, чтобы вы могли сосредоточиться на бизнес-логике в вашем PHP-скрипте. Он написан на C, поэтому он очень стабилен, независимо от того, что вы делаете в своих PHP-скриптах.

В основном это обеспечивает следующую функциональность:

  • демонизирует, так что вам не придется возиться с nohup)
  • многозадачность, в вашем случае это не актуально, поэтому вы просто устанавливаете параллельные процессы на 1
  • повторный запуск, так что вам не придется возиться с разветвлением.

Существует множество функциональных возможностей для обработки ошибок в сценариях PHP и ошибочных долгосрочных сценариев.

Его довольно легко установить и настроить, и на сайте есть много документации, с которой можно начать. Стоит хотя бы быстро взглянуть, поможет ли это вам.

http://fat -controller.sourceforge.net /

...