Я хочу, чтобы 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
Хеш (#) '#' разрешен для поля дня недели и должен сопровождаться числом от одного до пяти. Он позволяет указать такие конструкции, как "вторая пятница" данного месяца.