Запланированные задачи

Расширение может запускать некоторые процедуры периодически, например, каждые 10 минут, каждый час или ежедневно. Этот интерфейс планирования управляет работой утилиты crontab в Linux и приложения Планировщик задач в Windows. Этот интерфейс представлен двумя классами: pm_Scheduler и pm_Scheduler_Task. Первый класс представляет собой диспетчер задач, а второй – задачу.

Для успешного планирования задачи ваш код должен отвечать следующим требованиям:

  • Поместите запланированную задачу в папку /plib/scripts/ относительно корневой папки расширения.
  • Инициализировать контекст расширения (pm_Context::init) перед планированием задачи.
  • Запланировать задачу, используя pm_Scheduler и pm_Scheduler_Task.
Примеры использования

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

$task = new pm_Scheduler_Task();
$task->setSchedule(array(
 'minute' => '0,4,9,14,19,24,29,34,39,44,49,54,59',
 'hour' => '*',
 'dom' => '*',
 'month' => '*',
 'dow' => '*'
 ));
$task->setCmd('five-minutes-task.php');
pm_Context::init('extension-id');
pm_Scheduler::getInstance()->putTask($task); 
// Сохранение id задачи, чтобы удалить ее, если потребуется

Смотрите пример использования запланированных задач в Упражнении 2.

Составление расписания запусков

При составлении расписания запусков обратите внимание на следующие различия для разных операционных систем:

  • В Linux расписание можно задать в формате cron. Читайте больше об этом формате здесь: http://www.nncron.ru/help/EN/working/cron-format.htm.
  • В Windows расписание можно установить с помощью запятых (,) и звездочек (*).
  • Мы рекомендуем вам использовать следующие кроссплатформенные константы для задания периода времени между двумя запусками задачи:

    pm_Scheduler::$EVERY_MIN

    pm_Scheduler::$EVERY_5_MIN

    pm_Scheduler::$EVERY_10_MIN

    pm_Scheduler::$EVERY_HOUR

    pm_Scheduler::$EVERY_DAY

    pm_Scheduler::$EVERY_WEEK

    pm_Scheduler::$EVERY_MONTH

  • В Windows для одной задачи можно использовать не более 48 различных условий запуска (триггеров). Читайте больше о триггерах и об этом ограничении здесь:
    http://msdn.microsoft.com/en-us/library/windows/desktop/aa383619%28v=vs.85%29.aspx
Перебор задач

Если вам надо организовать циклическое выполнение запланированных задач, сделайте это следующим образом:

$tasks = pm_Scheduler::getInstance()->listTasks();
foreach ($tasks as $task) {
 var_dump($task->getId());
 var_dump($task->getSchedule());
 var_dump($task->getCmd());
}
Удаление запланированных задач

Мы настоятельно рекомендуем вам сохранить ID запланированных задач в хранилище пар "ключ-значение", прежде чем удалять задачи во время удаления расширения. Следующий код выполняет удаление задачи:

$task = pm_Scheduler::getInstance()->getTaskById('64daef15d48e0fe038bb20a77a171150');
pm_Scheduler::getInstance()->removeTask($task);

 

Обратите внимание, что ID задачи присваивается с помощью метода putTask

 

Leave your feedback on this topic here

If you have questions or need support, please visit the Plesk forum or contact your hosting provider.
The comments below are for feedback on the documentation only. No timely answers or help will be provided.