Crontab 执行的 php 检查 运行 php 脚本的作业忽略了连续的 if 语句

Crontab executed php job that checks running php scripts is ignoring consecutive if statements

我有这个 cron 作业

*/2 * * * * php /var/www/tests/cron.php > /dev/null 2>&1 &

和cron.php

<?php

error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
ini_set('error_log', '/var/log/apache2/error.log');

$output = shell_exec('ps -C php -f');

if (strpos($output, 'php /var/www/html/testing/server.php') === false) { 
    shell_exec('php /var/www/html/testing/server.php > /var/log/apache2/websocket.log 2>&1');
    echo 'Run 1';
}

if (strpos($output, 'php /var/www/html/testing/server-ssl.php') === false) { 
    shell_exec('php /var/www/html/testing/server-ssl.php > /var/log/apache2/websocket.log 2>&1');
    echo 'Run 2';
}

if (strpos($output, 'php /var/www/html/testing2/server.php') === false) { 
    shell_exec('php /var/www/html/testing/server.php > /var/log/apache2/websocket.log 2>&1');
    echo 'Run 3';
}

if (strpos($output, 'php /var/www/html/testing2/server-ssl.php') === false) { 
    shell_exec('php /var/www/html/testing/server-ssl.php > /var/log/apache2/websocket.log 2>&1');
    echo 'Run 4';
}

?>

由于某些奇怪的原因,脚本仅 运行 第一个 true if 语句。因此,例如,如果所有四个脚本都不是 运行ning,则 cron 作业将 运行 cron.php 并且第一个 if 语句将导致第一个脚本 运行。 2 分钟后,第二个将 运行,两分钟后,第三个将 运行,依此类推。

为什么所有四个 php 脚本都不会同时 运行(假定当 crontab 执行 cron.php 时所有脚本都不是 运行ning)?

如前所述,supervisord 可能是解决此问题的最佳方式,因为它可以轻松监控任务并在必要时重新启动它们。但是,使用此脚本,您可以使用 & 将其发送到后台,以便 shell_exec 立即 return 并继续。