Можно настроить в админке запуск крона, это ок. А как быть, когда нужные функции нужно выполнять в разные интервалы, условно говоря задачу1 каждые 3 часа, а задачу2 каждый 17 часов? А сам крон зафиксирован на запуск каждые 24 часа в админке.
Как программно запускать такой крон? Или же это не через крон лучше решать?
Комментарии
https://www.drupal.org/project/elysia_cron
Установите тайминги и частоту каждой задачи хрон (вы можете запустить несколько заданий каждый день в указанный час, другие только раз в месяц и так далее ...). Для каждой задачи вы можете просто выбрать некоторые часто используемые опции ( «один раз в день», «раз в месяц» ...), или использовать мощный «Linux кронтаб» -like синтаксис , чтобы установить точные тайминги. Вы даже можете определить часто используемые опции для ускорения конфигурации сайта.
Программный периодический крон в разное время.
Сегодня видел в админке у коллег, программный крон, но похоже это Восьмёрка, сорри.
Крон должен запускаться с сервера (читать про cron), каждые n-времени (например, раз в час, или каждые 15 мин.), каждая задача реализуется отдельно в hook_cron, в нем же реализуется логика для проверки временного интервала (вполть до записи времени выполнения последней процедуры в БД).
То что в админке - лучше вообще отключить.
Как идёт проверка hook_cron ? Как заставить запускаться хуки эти по времени, иначе как в админке Друпала?
Нет, это неприемлемо. Никаких серверов, он должен запускаться из модуля
Поделитесь потом магией запускающей крон из модуля )))
Думаю оставить в неведении, ибо нефиг
Вот про это вопрос. Как проверяют то такое? Есть примеры?
Сравнивают данные.
<?php
if ((time() - $last_procedure_time) > $n) {}
else {}
?>
Это фиксированная переменная, содержащая время последнего события? Или вы меня пытаетесь PHP учить?
"Это" пример.
$last_procedure_time - переменная для этого примера, что положите туда - то там и будет.
Тоже и про $n.
Странный вопрос... Оставлю без ответа.
То есть она сама заполняется и зависит от модуля? То есть в modulename_cron она присутствует по умолчанию и вашим кодом проверяется?
НО у меня тут два вызова - условно каждые 3 и 17 часов. Как такое проверить, если переменная одна?
Нет! То есть Вы сами заполняете ее данными, которые получаете применяя логику для Вашего случая.
Я изначально написал что можно записывать время в БД, соответственно при проверке эту запись получаем и с ней ровняем. После выполнения - данные в БД переписываем.
Да это понятно, как и что ручками можно. Я спрашивал, нет ли готовых решений - выясняем что нет, никто таких не знает, все вручную.
Под готовыми решениями я не имею ввиду готовый модуль, а указания на какую-либо функцию или механизм. В модуле я том пороюсь, может там и найду, это без сомнения
Зачем искать (ну или делать) какой-то готовый механизм, который должен будет учитывать 100500 случаев, и который заменяет 2-3-4 строки кода?
variable_set/variable_get позволяют сохранять/получать переменные. Как получать/сравнивать таймстампы, думаю не стоит объяснять?
Ваш хук крон вызывается, вы проверяете, прошло-ли нужное время с последнего запуска кода. Если нет, ничего не делаете, если да, записываете новый таймстамп и запускаете что-то. Всё. При этом логику можно сколь угодно усложнить, например, запускать только по чётным дням, или в пятницу тринадцатое. И что, готовый механизм должен всё это уметь?
Принципиально не буду тут писать PHP код. Имхо, просто пора учиться думать и программировать, а не искать готовые решения.
Ultimate Cron