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.

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

Что такое прокси-сервер: пояснение простыми словами, зачем нужны прокси

Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…

21.11.2024

Что такое PWA приложение? Зачем необходимо прогрессивное веб-приложение

Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…

19.11.2024

Как создать игру на телефоне: программирование с помощью конструктора

Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…

17.11.2024

Google Bard: эффективный аналог ChatGPT

В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…

14.11.2024

Скрипт и программирование: что это такое простыми словами

Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…

12.11.2024

Дедлайн в разработке: что это такое простыми словами

Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…

11.11.2024