Webasyst Cron
Регулярное выполнение повторяющихся заданий без участия пользователя.
Сервис Webasyst Cron позволяет вашему приложению выполнять периодически повторяющиеся действия без участия пользователя (например, синхронизацию данных, удаление неактуального кеша, рассылку уведомлений и т. п.). Это избавляет от необходимости вручную настраивать серверный планировщик в панели управления хостингом.
Сервис доступен, только если в системных настройках активировано подключение к Webasyst ID.
Как это работает
-
Ваше приложение активирует задание с указанной периодичностью: отправляет специальный запрос в сервис Webasyst Cron.
Это аналог ручной настройки задания для серверного планировщика в контрольной панели хостинга.
-
Webasyst Cron регулярно отправляет HTTP-запросы в аккаунт пользователя, где фреймворк Webasyst передаёт эти запросы на обработку PHP-классам заданий, реализованным в вашем приложении.
Это аналог выполнения настроенного задания обычным серверным планировщиком.
-
Если нужно прекратить выполнение задания, нужно отправить другой запрос в сервис Webasyst Cron — указанное задание будет удалено из списка активных.
Это аналог удаления задания планировщика вручную в контрольной панели.
1. Создайте файл конфигурации
Создайте файл конфигурации lib/config/cron.php в исходном коде вашего продукта. В нём опишите расписание и параметры периодически выполняемых заданий:
return [
'job-1' => [
'expression' => '*/6 * * * *', // выполнять каждые 6 минут
'action' => 'example' // идентификатор задания (job_id)
],
'job-2' => [
'expression' => '* * * * *', // выполнять каждую минуту
'action' => 'other', // идентификатор задания (job_id)
'params' => [ // дополнительные параметры для выполнения задания
'foo' => 'bar'
]
],
// ...
];
Параметры конфигурации заданий
-
expression
Строка периодичности в стандартном формате Cron.
-
action
Уникальный идентификатор задания в рамках продукта.
-
params
Необязательный ассоциативный массив параметров, передаваемый в PHP-класс задания.
Ключи массива можно использовать, например, для удобного доступа к нужной записи.
2. Создайте PHP-классы заданий
Логика выполнения каждого задания должна быть реализована в отдельном классе:
- Имя файла:
[app_id][Job_id].cron.php. - Имя класса:
[app_id][Job_id]Cron. - Базовый класс: должен наследоваться от системного класса
waCronExecutor.
Точка входа для выполнения любого задания — публичный метод execute($params).
Пример
<?php
class myappExampleCron extends waCronExecutor
{
/**
* @param array $params Значение элемента 'params' из cron.php
*/
public function execute($params)
{
// Ваша бизнес-логика
$foo = $params['foo'] ?? null;
}
}
3. Реализуйте управление заданиями
Для отправки запросов к сервису Webasyst Cron используется системный класс waServicesApi, который возвращает объект installerServicesApi со следующими публичными методами:
Чтение конфигурации заданий приложения
Используйте вызов системного метода:
wa([app_id])->getConfig()->getCron()
public function schedule ($cron_expression, $action, $app_id)
Активирует задание приложения.
Параметры
-
$cron_expression
Строка с указанием периодичности выполнения задания в стандартном формате Cron.
-
$action
Идентификатор задания.
-
$app_id
Идентификатор приложения.
Пример
$cron_config = wa($app_id)->getConfig()->getCron();
$cron_action = '...'; // job_id
/** @var installerServicesApi */
$api = new waServicesApi();
$result = $api->schedule(
$cron_config[$cron_action]['expression'],
$cron_action,
wa()->getApp()
);
public function deleteJob ($action, $app_id)
Удаляет задание приложения.
Параметры
-
$action
Идентификатор задания.
-
$app_id
Идентификатор приложения.
Пример
/** @var installerServicesApi */ $api = new waServicesApi(); $result = $api->deleteJob($cron_action, wa()->getApp());
public function getJobs ($app_id)
Возвращает список активных заданий приложения.
Параметры
-
$app_id
Идентификатор приложения.
Пример
/** @var installerServicesApi */ $api = new waServicesApi(); $result = $api->getJobs(wa()->getApp());
Как активировать задание вручную (в контрольной панели хостинга)
Если нужно обойтись без вызова системного метода schedule().
Для этого настройте задание серверного планировщика с командой вида
php cli.php --cron [app_id] [job_id]









