Плагин: Планировщик заданий
О плагине
- @package cronManager
- @author Vladislav Andreev v@salesman.pro
- @version v.0.6 beta от 03.08.2022
Плагин позволяет управлять заданиями для планировщика CRON из удобного веб-интерфейса.
Changelog
03.08.2022: v0.6 beta
- накопительные исправления
- добавлена возможность передавать параметры
- добавлен метод disableTask
03.02.2020: v0.5 beta
- первый релиз beta-версии
Возможности плагина
- Управление заданиями CRONTAB в удобном интерфейсе
- Человеко-понятное формирование периодичности выполнения задания
- Просмотр логов выполнения заданий ( последние 10 результатов для каждого задания )
- Отключение задания без необходимости удаления
- Контроль выполнения задания ( для длительных заданий ) - новое задание не будет запущено, если не закончено выполнение предыдущего запуска этого же задания
Настройка плагина
Запуск основного процесса
Для успешного функционирования плагина следует добавить единственное задание в стандартный планировщик заданий:
* * * * * path/to/phpbin path/to/crm/plugins/cronManager/scheduler.php 1>> /dev/null 2>&1
Именно этот скрипт будет управлять всеми остальными заданиями.
Важно!
Замените path/to/phpbin на свой путь до исполняемого файла PHP
Замените path/to/crm на свой абсолютный путь до папки с CRM
Формирование заданий
Формирование заданий состоит из 3-х составляющих:
- периодичность
- исполняемая программа - wget, curl, php и т.п.
- исполняемая команда (скрипт) - наш php-скрипт, который будем выполнять
Подробнее про Cron - https://ru.wikipedia.org/wiki/Cron
Исполняемая программа
Исполняемая программа ( ИП ) - это основная программа, которая выполняет указанную задачу, записанную в виде скрипта. В качестве ИК могут использоваться:
- wget
- curl
- php
- bash
- и т.п.
Наши скрипты написаны на PHP, поэтому будем рассматривать его в качестве исполняемой программы:
- Минимальная версия PHP, поддерживаемая плагином 7.2
- Если на сервере установлена одна версия PHP, то можно указать просто php
- Если на сервере установлены альтернативные версии PHP, то рекомендуется выяснить путь до исполняемого файла командой locate -b '\php' ( например /opt/php72/bin/php )
Важно!
Утилиты WGET и CURL используют HTTP-запросы (как браузер), поэтому ИП должна содержать URL-адрес.
Например:
* * * * * /usr/bin/wget -O - -q -t 1 --no-check-certificate https://crm.ru/api/leads/cron.php?api_key=t1xdeOwWSIqgDol70CkRdK3WD4N4cm /dev/null 2>&1
Исполняемая команда ( ИК )
Исполняемая команда - это наш скрипт, который выполняет необходимые действия. Плагин может подключить существующие системные скрипты, разработанные для планировщика заданий с рекомендованными настройками по периодичности:
- Бекап Базы данных - производит ежедневное резервное копирование БД
- Дела на день - производит отправку дел на текущий день, рекомендуется запуск в утреннее время
- Проверка почты сотрудников - производит проверку почты через Почтовик для каждого сотрудника, не зависимо от того - авторизовался пользователь в системе или нет
- Сборщик заявок - производит проверку почтовых ящиков, настроенных в модуле Сборщик заявок
- Синхронизация истории звонков (для всех поддерживаемых PBX) - производит синхронизацию истории звонков
Периодичность
Плагин поддерживает 6 периодов запуска + 1 экспертный режим ( для тех, кто знаком с командами ):
- Каждую минуту - в этом режиме задается с какой периодичностью в минутах будет выполняться задание. Например: каждые Х минут
- Каждый час - в этом режиме задание выполняется каждые Х часов
- Ежедневно - в этом режиме задание выполняется в Х часов Y минут ежедневно
- Еженедельно - в этом режиме задание выполняется в указанное время Х часов Y минут в указанные дни недели
- Ежемесячно - в этом режиме задание выполняется в указанное время Х часов Y минут в указанные дни каждого месяца
- Ежегодно - в этом режиме задание выполняется в указанное время Х часов Y минут в указанный день указанного месяца
- Экспертный режим - в этом режиме есть возможность задать задание в явном виде
Использование в сторонних модулях и плагинах
Для добавления своего задания в Планировщик надо подключить необходимые классы:
require_once $rootpath."/plugins/cronManager/php/autoload.php";
require_once $rootpath."/plugins/cronManager/vendor/autoload.php";
$cron = new Cronman\Cronman();
$task = [
// название задания
"name" => "customName",
// стандартная периодичность: см. $cron::PERIODS;
"parent" => "everyminutes",
// исполняемая программа
"bin" => "/opt/php72/bin/php",
// исполняемый скрипт, где {{DIR}} будет заменен на
// абсолютный путь до папки с CRM,
// или указываем свой путь или https-адрес
"script" => "{{DIR}}/cron/backup.php",
// массив с указанием периодичности
"period" => [
"i" => "",
"h" => "",
"d" => "",
"m" => "",
// для экспертного режима, например 0 */1 * * *
"cmd" => "",
],
// активность задания - on|off
"active" => "on",
];
// добавляет/редактирует задание и
// возвращает id записи задания в базе данных
$shedule = $cron -> setTask($id, $task);
// возвращает данные по заданию
$shedule = $cron -> getTask($id);
// удаляет задание
$result = $cron -> deleteTask($id);
// возвращает список заданий
$result = $cron -> getTaskList();