Скрипт PHP при запуске не запускается

У меня есть 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 секунд после запуска?

0

Решение

Попробуйте изменить скрипт выскочки на:

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

Другие решения

Это плохая идея делать это так.

PHP предназначен для запуска по запросу и не бесконечен. Может быть, это можно сделать, но кто знает, какие утечки памяти вы представите?

Я настоятельно рекомендую вам посмотреть cronjobs.

Просто crontab ваш код и запускайте его каждые 5 секунд.

Вот пример для запуска каждую минуту. Я не думаю, что вы можете снизить до 5 секунд, используя cron.

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

Посмотрите здесь для другого подхода:
Запуск cron каждые 30 секунд

-1

По вопросам рекламы [email protected]