Git Product home page Git Product logo

phpschedule's Introduction

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

phpschedule's People

Contributors

ponikrf avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

zhrnya

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.