PHP 启动时的循环脚本无法启动

PHP loop script on Startup wont start

我有一个 PHP 脚本,我想永远 运行;从启动服务器到关闭。

PHP 脚本

<?php
require_once("connection.php"); // I am connecting to MySQL with PDO

while(true) {
//some of my code here
....
....
//code ended
sleep(5);
}
?>

我的 /etc/init/myscript.conf 文件

description "Endless PHP loop"
start on startup
stop on shutdown
respawn
chdir /var/www/html/
exec php -f script.php

我也试过了

script
exec php -f script.php
end script

当我 运行: 从终端脚本启动 myscript 时 运行ning 没有任何问题,但如果服务器重新启动,myscript 将不会再次 运行。有时脚本会停止 运行ning(我不知道为什么)并且不会再次启动 运行ning。

我在谷歌上搜索了两天,但没有找到解决方案。可能我不知道要照顾什么。

可能是因为 apache、mysql 或 php 启动导致脚本失败?启动后是否有延迟脚本 30 秒的选项?

这样做是个坏主意。

PHP 是根据要求设计成 运行 的,而不是无穷无尽的。也许可以做到,但谁知道你会引入什么内存泄漏?

我强烈建议您查看 cronjobs。

只需对您的代码执行 crontab,然后 运行 每 5 秒执行一次。

这是每分钟 运行 的示例。我不认为你可以使用 cron 减少到 5 秒。

* * * * * cd /home/yourdir/public_html/admin/ && php -q /home/yourdir/public_html/admin/updatedb.php

在这里查看另一种方法: Running a cron every 30 seconds

尝试将您的 upstart 脚本更改为:

description "Endless PHP loop"

start on startup
stop on shutdown

respawn

script
    sleep 30
    exec php -f /var/www/html/script.php
end script

如果您想使用 cron,您需要从 PHP 中删除无限循环并添加这些 cron 条目:

* * * * * /usr/bin/php -f /var/www/html/script.php &> /dev/null
* * * * * (sleep 5;/usr/bin/php -f /var/www/html/script.php &> /dev/null)
* * * * * (sleep 10;/usr/bin/php -f /var/www/html/script.php &> /dev/null)
* * * * * (sleep 15;/usr/bin/php -f /var/www/html/script.php &> /dev/null)
* * * * * (sleep 20;/usr/bin/php -f /var/www/html/script.php &> /dev/null)
* * * * * (sleep 25;/usr/bin/php -f /var/www/html/script.php &> /dev/null)
* * * * * (sleep 30;/usr/bin/php -f /var/www/html/script.php &> /dev/null)
* * * * * (sleep 35;/usr/bin/php -f /var/www/html/script.php &> /dev/null)
* * * * * (sleep 40;/usr/bin/php -f /var/www/html/script.php &> /dev/null)
* * * * * (sleep 45;/usr/bin/php -f /var/www/html/script.php &> /dev/null)
* * * * * (sleep 50;/usr/bin/php -f /var/www/html/script.php &> /dev/null)
* * * * * (sleep 55;/usr/bin/php -f /var/www/html/script.php &> /dev/null)