Когда я попытался установить время с ежемесячным заданием cron, мне пришлось использовать «1 месяц».
Но это создало cronjob для каждого месяца в сегодняшний день, например.
0 9 18 * * ..... вместо
0 9 1 * * ..... который сработает в первый день месяца ...
вы показываете там весь вывод cron? в вашем первом примере цифра 9 в часах и 18 в днях.
# .---------------- минута (0-59) # | .------------- час (0 - 23) # | | .---------- день месяца (1 - 31) # | | | .------- месяц (1 - 12) ИЛИ янв, фев, мар, апр ... # | | | | .---- день недели (0-6) (воскресенье = 0 или 7) ИЛИ вс, пн, вт, ср, чт, пт, сб # | | | | | # * * * * * команда для выполнения
нет, полный вывод был:
0 9 18 * * command
вы можете вставить свой файл schedule.rb? что-то кажется неправильным.
every 1.month, :at => "9 AM" do
command "..."
end
Ах, я вижу проблему (кроме меня, у меня нет хороших документов в этой области). Когда вы используете: at с 1.month, день, час и минута извлекаются из времени. Поэтому, когда вы просто используете время вроде 9 утра, предполагается, что день, который вы имеете в виду, сегодня.
Один из способов исправить это - указать полную дату. Я допускаю, что это выглядит некрасиво, но должно работать: каждые 1 месяц,: at => "1 января, 9 утра"
Он проигнорирует "Январь", но это необходимо для успешного синтаксического анализа (всякий раз, когда используется гем Chronic для синтаксического анализа даты и времени).
Надеюсь, это поможет.
в
Если вы не хотите называть полную дату, вы можете попробовать что-то вроде этого:
каждые 1. месяц,: at => "начало месяца в 9 утра"
Это произведет предполагаемое «0 9 1 * *». Это также сделает ваш код немного чище :)
Надеюсь, это поможет.
-AP
Спасибо, Джаван.
Как вы сказали, это не красиво, но работает!
tsommer ... вышеприведенное решение, которое я опубликовал, должно работать. Не уверен, смотрели ли вы на это.
«начало месяца в 9 утра» - вот правила! Благодарю.
Мне нужно выразить это задание cron «0 0 27-31 * *». Возможно ли это с текущим синтаксисом?
Возможно, было бы лучше предоставить другой метод в DSL для передачи заданий cron в обычном синтаксисе cron, например:
cron "0 0 27-31 * *" сделать # ... конец
Я согласен, что вариант с исходным синтаксисом был бы неплохим (патчи приветствуются!). А пока вы можете сделать это с помощью Ruby.
every 1.month, :at => (27..31).to_a.map { |d| "12am January #{d}" } do
command "..."
end
Джаван благодарит за быстрый ответ.
Сейчас я использую следующий патч. Возможно, регулярное выражение потребует некоторых улучшений, но теперь оно работает для меня.
класс Когда :: Выход :: Крон CRON_EXP = / [^ \ s] + \ s [^ \ s +] \ s [^ \ s] + \ s [^ \ s] + \ s [^ \ s] + / def time_in_cron_syntax case @time когда CRON_EXP, то @time когда Symbol затем parse_symbol когда String, то parse_as_string иначе parse_time конец конец конец
Тогда я могу:
каждые '0 0 27-31 * *' делать ... конец
как я создаю каждые 2 месяца, конец дня (31-е), 11:59 вечера делать cron?
каждые 2 месяца, при 59 11 л * 0
Самый полезный комментарий
Если вы не хотите называть полную дату, вы можете попробовать что-то вроде этого:
каждые 1. месяц,: at => "начало месяца в 9 утра"
Это произведет предполагаемое «0 9 1 * *». Это также сделает ваш код немного чище :)
Надеюсь, это поможет.
-AP