У меня есть 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
Когда я запускаю: start myscript из терминала скрипт запускается без проблем, но если сервер перезагружается, myscript больше не запускается. Также иногда скрипт останавливается (я не знаю почему) и не запускается снова.
Я гуглю два дня и не нашел решения. Может быть, я не знаю, что заботиться.
Может ли быть так, что скрипт завершится неудачно из-за запуска apache, mysql или php? Есть ли возможность отложить скрипт на 30 секунд после запуска?
Попробуйте изменить скрипт выскочки на:
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 предназначен для запуска по запросу и не бесконечен. Может быть, это можно сделать, но кто знает, какие утечки памяти вы представите?
Я настоятельно рекомендую вам посмотреть cronjobs.
Просто crontab ваш код и запускайте его каждые 5 секунд.
Вот пример для запуска каждую минуту. Я не думаю, что вы можете снизить до 5 секунд, используя cron.
* * * * * cd /home/yourdir/public_html/admin/ && php -q /home/yourdir/public_html/admin/updatedb.php
Посмотрите здесь для другого подхода:
Запуск cron каждые 30 секунд