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:Thus
script1
will always catch the first and third saturdays andscript2
will always catch the second and fourth.