Looping скриптов
Для повторного выполнение важных скриптов или процессов, подойдут системные инструменты и простые скрипты, в том числе на PHP.
Bash и crontab
Обычно достаточно задействовать возможности bash:
#!/bin/bash
while [ “true” ]; do
/path/to/script.php
sleep 15
done
## Бесконечный bash-скрипт выполнения нужного PHP скрипта каждые 15 секунд
Делаем то же, но без использования отдельного скрипта bash:
while [ "true" ]; do /path/to/script.php; sleep 15; done
## Повторение скрипта PHP каждые 15 секунд консольной командой
Для этой цели подходит демон cron, который поставляется с UNIX-системами:
# crontab -e
*/5 * * * * /usr/bin/php -f /usr/local/bin/script.php &> /dev/null
## Добавить путь к скрипту в файл конфигурации crontab, выполнять каждые 5 минут, без логирования
Учтите, что желательно предотвращать одновременное выполнение нескольких образцов скрипта. Для этого можно использовать проверку временного файла:
if(file_exists('/tmp/script.lock')){
exit();
}
file_put_contents(‘/tmp/script.lock’,”);
# Здесь выполняется нужный код
unlink(‘/tmp/script.lock’);
## Внутрь можно поместить сам код скрипта или ссылку на выполнение нужного скрипта
И уже созданный новый скрипт помещаете в crontab.
Примечательно, что можно проверять список процессов ОС, чтобы нужная программа не повторялась:
#!/bin/sh
if ps -ef | grep -v grep | grep script.php ; then
exit 0
else
/home/user/bin/script.php >> /home/user/bin/script_php.log &
exit 0
fi
## Проверяет script.php в выполняющихся процессах, запускает, если не выполняется
Полученный скрипт нужно запустить в cron на повторение.
Средствами PHP (pcntl)
Повторное выполнение скриптов возможно доступными средствами PHP.
Пригодится расширение для управления процессами pcntl. Следующий скрипт перезапускается автоматически после выполнения:
echo ++$argv[1]; # подсчет перезапусков
$_ = $_SERVER[‘_’];
echo “n=Запуск=n”;
# Здесь размещается нужный код для выполнения
$cnt = 0;
while( $cnt++ < 10000000 ){}
echo “n= Выполнено =n”;
# Перезапуск скрипта
**pcntl_exec($_, $argv);**
## Также можно указать полный путь к скрипту
Такой подход используется для перезапуска скрипта в случае непредвиденного завершения:
echo ++$argv[1];
$_ = $_SERVER[‘_’];
register_shutdown_function(function () {
global $_, $argv; # Ссылка на глобальные переменные
# Перезапуск
pcntl_exec($_, $argv);
});
echo “n=Запуск=n”;
# Здесь размещается нужный код для выполнения
$cnt = 0;
while( $cnt++ < 10000000 ){}
echo “n= Выполнено =n”;
die;
pcntl_exec($_, $argv);
## В этом случае необходимо правильно завершить выполнение (die)
Еще один вариант автоматического перезапуска скриптов – отлавливание сигналов, описанное в статье об отказоустойчивости в PHP.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: