启动时的PHP循环脚本不会启动

时间:2015-11-02 15:33:27

标签: php startup init

我有一个我想要永远运行的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运行没有任何问题,但如果服务器重启,则myscript不会再运行。有时候脚本也会停止运行(我不知道为什么)并且不会再开始运行。

我谷歌搜索了两天,我没有找到解决方案。也许我不知道该照顾什么。

是不是因为apache,mysql或php启动脚本失败?启动后30秒可以选择延迟脚本吗?

2 个答案:

答案 0 :(得分:1)

尝试将您的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)

答案 1 :(得分:-1)

这样做是个坏主意。

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