Skip to content

Простой планировщик заданий с управлением через базу данных mysql и простой установкой

Notifications You must be signed in to change notification settings

ponikrf/PhpSchedule

Repository files navigation

PhpSchedule

Простой планировщик заданий с управлением через базу данных mysql и простой установкой.

Планировщик раз в минуту проверяет новые задания в базе данных и выполняет их. Каждая задача выполняется отдельным процессом. Важно отметить, что планировщик не предоставляет никакие средства для обеспечения безопастности при выполнении. Тот, кто его использует, сам определяет область его влияния. Все что делает планировщик - это выполняет задания, которые ему дают.

Планировщик рекомендуется использовать для локальных целей в своих домашних или изолированных сервисах.

После выполнения планировщик записывает данные о выполнении в базу (вывод задачи и время выполнения), что позволяет полноценно отследить работу планировщика и выполнение задачи.

Класс демонизации был позаимствован у Petr Bondarenko, но в итоге был немного переделан и часть кода пришлось убрать.

Возможности

Планировщик позволяет выполнять команды через определенный интервал времени. Базовые интервалы определяются возможностью mysql

  • YEAR Год
  • MONTH Месяц
  • DAY День
  • HOUR Час
  • MINUTE Минута
  • SECOND Секунда

Помимо интервала, можно указать количество интервалов, через которые должно выполняться задание. Таким образом, можно формировать привычные для нас интервалы, например '7 DAY' - 1 неделя и т.п.

Планировщик может ограничить количество выполнения одной задачи.

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

Установка

Требования для работы планировщика:

  • PHP версии 7.0 или выше. Работа на PHP 5.* не гарантирована
  • Mysql версии 5.5 или выше.

Необходимо выполнить scheduler.sql, после чего будет создана структура для работы планировщика.

По умолчанию создается одна задача Test, которая запускает ps ax раз в минуту.

Также требуется настроить подключение к базе данных в файле config.php. При указании в качестве хоста localhost, может возникнуть проблема с подключением к базе данных. Для корректной работы необходимо указвать хост 127.0.0.1

Работа планировщика

После установки и настройки можно запустить планировщик

php ./run.php start

Если в вывод не попали ошибки, значит все сделано правильно, и теперь мы можем наблюдать появление новых строк о результате выполнения в таблице tbl_task_history.

Нужно учитывать, что при перезагрузке системы, планировщик не будет автоматически запущен. Вы сами должны определить область его влияния и, соответсвенно, сами настроить автоматический запуск планировщика. Ниже будет приведен пример настройки автоматического запуска для Ubuntu (systemd) Планировщик поддерживает команды start,stop,restart,status.

Настройка задач

Чтобы добавить задачу, необходимо добавить строку в таблицу tbl_task.

Описание полей таблицы:

  • name VARCHAR(255) - название задания
  • description TEXT - описание задания
  • command TEXT - команда
  • singleton TINYINT(1) - запрет повторного запуска задачи (если прошлая задача еще не была выполнена)
  • repeat TINYINT(1) - повторять (1) или нет (0)
  • repeat_count INT(11) - сколько раз повторять (0 без ограничений)
  • interval VARCHAR(45) - интервал (список поддерживаемых интервалов указан выше) указывать строкой например 'DAY'
  • interval_count INT(11) - количество интервалов
  • start_datetime DATETIME - дата начала (см. last_datetime)
  • end_datetime DATETIME - дата окончания действия (если вы хотите, чтобы задание продолжало запускаться до конкретной даты)
  • last_datetime DATETIME - дата время последнего запуска. ВАЖНО именно от этой даты идет отсчет интервалов, поэтому при вставке указывать эту дату равной дате начала
  • create_datetime TIMESTAMP - дата время создания, заполняется автоматически

Результат выполнения

Результат выполнения хранится в таблице tbl_task_history.

Описание полей таблицы:

  • id_task INT(11) - идентификатор задания
  • result TEXT - вывод выполнения задания
  • execute_time DECIMAL(11,6) - время, потраченное на выполнение задания
  • create_datetime TIMESTAMP - дата время создания, заполняется автоматически

Пример автозапуска Ubuntu (systemd)

Чтобы добавить в автозагрузку планировщик, необходимо отредактировать файл phpschedule.service согласно вашей конфигураци. После чего необходимо скопировать его в /etc/systemd/system/

Нужно проверить правильность настройки сервиса

systemctl start phpschedule

Если все хорошо, можно добавить его в автозагрузку

systemctl enable phpschedule

About

Простой планировщик заданий с управлением через базу данных mysql и простой установкой

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published