Добрый день!
Есть 5 разных drupal скриптов, которые нужно запускать с разной периодичностью (какие-то каждый час, какие-то раз в месяц). Сейчас скрипты добавлены в Rules с триггером по запуску Cron. За выполнение и запуск крона отвечает модуль: Ultimate Cron. Модуль хороший, но он не позволяет разделять запуски Rules (так чтобы у каждого скрипта было свое время запуска).
Вопросы:
Каким модулем можно разделять запуски скриптов Rules с триггером по Cron?
Возможно, вместо размещения скриптов в Rules и запуска их от туда, есть более совершенная схема размещения и исполнения периодически запускаемых скриптов на сайте?
Спасибо.
Комментарии
Проще для этих целей заюзать серверный крон и, возможно, кастомные скрипты для запуска правил rules (а может в таком случае и rules будут не нужны)
Чтобы ultimate cron подхватил ваши разные скрипты, они должны выполняться из разных hook_cron(), т.е. вам нужны 5 кастомных модулей.
Вы можете вынести логику в отдельные файлы и запускать их серверным кроном с нужной периодичностью, это будет заведомо лучше, так как при запуске через cli - и выполнение выходит быстрее и лимиты отдельные
В том же рулзе, можно проверять текущее время/дату.
Если вариантов написать программно логику периодов возможности нет, можно завязываться на эти показатели.
Если нужно еще более точно - можно наколхозить с сущностями, в которые записывать отметки последних запусков для каждого типа таска, и учитывать эти данные в проверках (правильнее, конечно, хранить такие данные в других местах, но не уверен что текущая инфраструктура правил позволяет такое).
И да, крон должен запускаться с сервера.
в https://www.drupal.org/project/elysia_cron можно настраивать периодичность модульных кронов
Я так понял он аналогичен Ultimate Cron?
Не использовал ультимат, так как иллюзия покрывала потребности, из Вашего текста понял что все у Вас идут через рулесный крон, и тот код который Вы нашли должен помочь в решении. Однако на практике чаще сталкиваюсь и решаю проблемы которые связаны не с временем запуска крон задач, а с разделением ресурсов для из выполнения и распределением нагрузки на сервер, а это часто решается выполнением крона через batch с progressive = false в фоновом режиме без интерактива. Вопросы времени остаются только для целевых задач где важна временная точка запуска.
Добрый вечер всем! Спасибо за ответы!! Пока нашел такое решение:
1. Создаём Rule с реакцией на Cron maintenance tasks are performed.
2. Добавляем условие Execute custom PHP code с кодом:
<?phpif (REQUEST_TIME - variable_get('my_rule_name_last_run') >= 60*60*6) {
variable_set('my_rule_name_last_run', REQUEST_TIME);
return TRUE;
}?>
Правило будет выполнено через 6 часов в ближайший запуск крона.
3. Далее запуск модульного крона (у Rules) должен быть чаще 6 часов.
Источник: http://xandeadx.ru/blog/drupal/705
ПС. (Ещё не оттестировал, но похоже вариант рабочий)
В ближайший запустится сразу, в следующий если пройдет 6 часов