Looping скриптов

admin

Для повторного выполнение важных скриптов или процессов, подойдут системные инструменты и простые скрипты, в том числе на 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.

Останні статті

Обучение Power BI – какие онлайн курсы аналитики выбрать

Сегодня мы поговорим о том, как выбрать лучшие курсы Power BI в Украине, особенно для…

13.01.2024

Work.ua назвал самые конкурентные вакансии в IТ за 2023 год

В 2023 году во всех крупнейших регионах конкуренция за вакансию выросла на 5–12%. Не исключением…

08.12.2023

Украинская IT-рекрутерка создала бесплатный трекер поиска работы

Unicorn Hunter/Talent Manager Лина Калиш создала бесплатный трекер поиска работы в Notion, систематизирующий все этапы…

07.12.2023

Mate academy отправит работников в 10-дневный оплачиваемый отпуск

Edtech-стартап Mate academy принял решение отправить своих работников в десятидневный отпуск – с 25 декабря…

07.12.2023

Переписки, фото, история браузера: киевский программист зарабатывал на шпионаже

Служба безопасности Украины задержала в Киеве 46-летнего программиста, который за деньги устанавливал шпионские программы и…

07.12.2023

Как вырасти до сеньйора? Девелопер создал популярную подборку на Github

IT-специалист Джордан Катлер создал и выложил на Github подборку разнообразных ресурсов, которые помогут достичь уровня…

07.12.2023