Cron – Weekly alternating cronjob (with step values)

cron

I want a cronjob to run on every 1st and 3rd Saturday in a month and another one to run every 2nd and 4th Saturday. Now crond offers "step values":

Step values can be used in conjunction with ranges. Following a range with "" specifies skips of the number's value through the range. For example, "0-23/2" can be used in
the hours field to specify command execution every other hour (the alternative in the V7 standard is "0,2,4,6,8,10,12,14,16,18,20,22"). Steps are also permitted after an asterisk,
so if you want to say "every two hours", just use "*/2".

But if I use

30 3 * * 6/2 command

both scripts run (indeterministically) on every second Saturday. What is the right way to get them to run alternating?

I know the possibility of a wrapper script, but I want to avoid it if there is a more elegant solution.

Best Answer

Since you know that one and only one Saturday will occur in the first 7 days of any month, you can follow that pattern and use the day-of-month field to keep each job separate:

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

Thus script1 will always catch the first and third saturdays and script2 will always catch the second and fourth.

Related Topic