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)
我有一个 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)