Wednesday, January 6, 2016

Why did my cron job run this month?



Today is November 1st 2016 or in (unambiguous) numerals, 2016-11-01.




I have a user cron job set up like this:



# m h  dom mon dow   command
33 3 1 */2 * /home/user/...


It is supposed to run every other month on the first of the month at 3:33am, no matter what day of week that is, but for some reason it was run today, even though 11 is not divisible by 2.



Can someone explain me this? Is my assumption of divisibility by 2 wrong?




EDIT: I forgot to mention, I am running cron version "3.0pl1-127+deb8u1" on a Debian 8.6 "Jessie" machine.


Answer



The / is not an arithmetic expression, instead it describes "step values" over the allowed range of values. So, since months always start with 1 instead of 0, /2 would mean "take every other value", resulting in (1, 3, 5, 7, 9, 11).



This is also decribed in the manual page, although this is not terrible clear and easy to understand:




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".




No comments:

Post a Comment

linux - How to SSH to ec2 instance in VPC private subnet via NAT server

I have created a VPC in aws with a public subnet and a private subnet. The private subnet does not have direct access to external network. S...