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 并继续。
我有这个 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 并继续。