Назад | Перейти на главную страницу

Еженедельное чередование cronjob (со значениями шагов)

Я хочу, чтобы cronjob запускался каждую 1-ю и 3-ю субботу месяца, а другой - каждую 2-ю и 4-ю субботу. Теперь crond предлагает "значения шага":

Значения шагов можно использовать вместе с диапазонами. После диапазона с "" указываются пропуски значения числа в диапазоне. Например, «0–23 / 2» можно использовать в поле часов, чтобы указать выполнение команды каждый второй час (альтернатива в стандарте V7 - «0,2,4,6,8,10,12,14,16 , 18,20,22 "). Шаги также разрешены после звездочки, поэтому, если вы хотите сказать «каждые два часа», просто используйте «* / 2».

Но если я использую

30 3 * * 6/2 command

оба сценария запускаются (неопределенно) каждую вторую субботу. Как правильно заставить их работать попеременно?

Я знаю возможность сценария-оболочки, но я хочу избежать этого, если есть более элегантное решение.

Поскольку вы знаете, что в первые 7 дней любого месяца будет одна и только одна суббота, вы можете следовать этому шаблону и использовать day-of-month поле, чтобы сохранить каждую работу отдельно:

30 3 1-7,15-21 * 6 script1
30 3 8-14,22-28 * 6 script2

Таким образом script1 всегда будет ловить первую и третью субботу и script2 всегда будет ловить второй и четвертый.

Почему бы не использовать cron #?

30 3 * * 6 # 1 Первая и третья команда
30 3 * * 6 # 3 Первая и третья команда
30 3 * * 6 # 2 SecondAndfourthCommand
30 3 * * 6 # 4 SecondAndfourthCommand

Хеш (#) '#' разрешен для поля дня недели и должен сопровождаться числом от одного до пяти. Он позволяет указать такие конструкции, как "вторая пятница" данного месяца.

http://en.wikipedia.org/wiki/Cron