PHP PCNTL Script - необходимо руководство
Вопрос
Я работаю над проектом по цене, где -то в приложении мне нужна эта функциональность
Запустите сценарий снова и снова с паузой в несколько секунд.
Я попытался использовать 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 -секундной паузой.
Решение
Если вы просто хотите повторять сценарий PHP каждые x секунд, то вы можете использовать Fat Controller для обработки всех демонстраций и запуска сценариев для вас, чтобы вы могли сосредоточиться на бизнес -логике своего сценария PHP. Это написано в C, так что он очень стабильный, независимо от того, что вы делаете в своих сценариях PHP.
Это в основном обеспечивает следующую функциональность:
- Демонизация, так что вам не нужно возиться с Nohup)
- Многозадачность, в вашем случае не релевантно, поэтому вы просто устанавливаете параллельные процессы на 1
- Повторный бег, поэтому вам не нужно возиться с разбрызгиванием.
Есть много функциональности, чтобы справиться с ошибками в сценариях PHP и ошибочных длинных сценариях.
Это довольно легко установить и настроить, и на веб -сайте много документации, чтобы вы начали. Стоит быстро взглянуть, по крайней мере, чтобы посмотреть, поможет ли это вам.