Программный периодический крон в разное время

jsv
Тип материала: 
Версия Drupal: 
Ключевые слова: 
Ср, 19/04/2017 - 19:45

Можно настроить в админке запуск крона, это ок. А как быть, когда нужные функции нужно выполнять в разные интервалы, условно говоря задачу1 каждые 3 часа, а задачу2 каждый 17 часов? А сам крон зафиксирован на запуск каждые 24 часа в админке.

Как программно запускать такой крон? Или же это не через крон лучше решать?

0 Спасибо

Комментарии

Аватар пользователя Studio VIZA
6 дней 17 часов назад Studio VIZA #

https://www.drupal.org/project/elysia_cron

Установите тайминги и частоту каждой задачи хрон (вы можете запустить несколько заданий каждый день в указанный час, другие только раз в месяц и так далее ...). Для каждой задачи вы можете просто выбрать некоторые часто используемые опции ( «один раз в день», «раз в месяц» ...), или использовать мощный «Linux кронтаб» -like синтаксис , чтобы установить точные тайминги. Вы даже можете определить часто используемые опции для ускорения конфигурации сайта.

0 Спасибо
Аватар пользователя jsv
6 дней 17 часов назад jsv #

Программный периодический крон в разное время.

0 Спасибо
Аватар пользователя Studio VIZA
6 дней 17 часов назад Studio VIZA #
jsv написал:
Программный

Сегодня видел в админке у коллег, программный крон, но похоже это Восьмёрка, сорри.

0 Спасибо
Аватар пользователя bumble
6 дней 2 часа назад bumble #

Крон должен запускаться с сервера (читать про cron), каждые n-времени (например, раз в час, или каждые 15 мин.), каждая задача реализуется отдельно в hook_cron, в нем же реализуется логика для проверки временного интервала (вполть до записи времени выполнения последней процедуры в БД).

То что в админке - лучше вообще отключить.

1 Спасибо
Аватар пользователя jsv
5 дней 21 час назад jsv #

Как идёт проверка hook_cron ? Как заставить запускаться хуки эти по времени, иначе как в админке Друпала?

0 Спасибо
Аватар пользователя bumble
5 дней 21 час назад bumble #
bumble написал:
Крон должен запускаться с сервера

bumble написал:
То что в админке - лучше вообще отключить.

0 Спасибо
Аватар пользователя jsv
5 дней 20 часов назад jsv #

Нет, это неприемлемо. Никаких серверов, он должен запускаться из модуля

0 Спасибо
Аватар пользователя bumble
5 дней 20 часов назад bumble #

Поделитесь потом магией запускающей крон из модуля )))

0 Спасибо
Аватар пользователя jsv
5 дней 20 часов назад jsv #

Думаю оставить в неведении, ибо нефиг

0 Спасибо
Аватар пользователя jsv
5 дней 23 часа назад jsv #
bumble написал:
логика для проверки временного интервала (вплоть до записи времени выполнения последней процедуры в БД)

Вот про это вопрос. Как проверяют то такое? Есть примеры?

0 Спасибо
Аватар пользователя bumble
5 дней 23 часа назад bumble #
jsv написал:
Как проверяют то такое?

Сравнивают данные.

jsv написал:
Есть примеры?

<?php
if ((time() - $last_procedure_time) > $n) {}
else {}
?>
1 Спасибо
Аватар пользователя jsv
5 дней 23 часа назад jsv #
bumble написал:
$last_procedure_time

Это фиксированная переменная, содержащая время последнего события? Или вы меня пытаетесь PHP учить?

0 Спасибо
Аватар пользователя bumble
5 дней 23 часа назад bumble #

"Это" пример.
$last_procedure_time - переменная для этого примера, что положите туда - то там и будет.
Тоже и про $n.

jsv написал:
Или вы меня пытаетесь PHP учить?

Странный вопрос... Оставлю без ответа.

1 Спасибо
Аватар пользователя jsv
5 дней 23 часа назад jsv #
bumble написал:
"Это" пример.

$last_procedure_time - переменная для этого примера, что положите туда - то там и будет.

То есть она сама заполняется и зависит от модуля? То есть в modulename_cron она присутствует по умолчанию и вашим кодом проверяется?
НО у меня тут два вызова - условно каждые 3 и 17 часов. Как такое проверить, если переменная одна?

0 Спасибо
Аватар пользователя bumble
5 дней 22 часа назад bumble #
jsv написал:
То есть она сама заполняется и зависит от модуля?

Нет! То есть Вы сами заполняете ее данными, которые получаете применяя логику для Вашего случая.

Я изначально написал что можно записывать время в БД, соответственно при проверке эту запись получаем и с ней ровняем. После выполнения - данные в БД переписываем.

1 Спасибо
Аватар пользователя jsv
5 дней 21 час назад jsv #

Да это понятно, как и что ручками можно. Я спрашивал, нет ли готовых решений - выясняем что нет, никто таких не знает, все вручную.

0 Спасибо
Аватар пользователя bumble
5 дней 21 час назад bumble #
jsv написал:
Я спрашивал, нет ли готовых решений

jsv написал:
Программный периодический крон в разное время

Studio VIZA написал:
https://www.drupal.org/project/elysia_cron

0 Спасибо
Аватар пользователя jsv
5 дней 20 часов назад jsv #

Под готовыми решениями я не имею ввиду готовый модуль, а указания на какую-либо функцию или механизм. В модуле я том пороюсь, может там и найду, это без сомнения

0 Спасибо
Аватар пользователя bsyomov
5 дней 20 часов назад bsyomov #

Зачем искать (ну или делать) какой-то готовый механизм, который должен будет учитывать 100500 случаев, и который заменяет 2-3-4 строки кода?
variable_set/variable_get позволяют сохранять/получать переменные. Как получать/сравнивать таймстампы, думаю не стоит объяснять?

Ваш хук крон вызывается, вы проверяете, прошло-ли нужное время с последнего запуска кода. Если нет, ничего не делаете, если да, записываете новый таймстамп и запускаете что-то. Всё. При этом логику можно сколь угодно усложнить, например, запускать только по чётным дням, или в пятницу тринадцатое. =) И что, готовый механизм должен всё это уметь? =)

Принципиально не буду тут писать PHP код. Имхо, просто пора учиться думать и программировать, а не искать готовые решения.

0 Спасибо