8-59/30 * * * * do_something
It replied: The command do_something will execute
the 8th through 59/30th minutes of
every hour every day.
That's a pretty poor description of something that will run at 8 and 38 minutes past the hour, every hour of every day.Not impressed - seems overly simplistic.
Agreed that it's not impressive, beings that the explanation is simply wrong. It's an edge case I'm definitely not handling properly. I've got [an open issue](https://github.com/pbyrne/cron-checker/issues/7) about combining ranges and modulo, but haven't gotten around to implementing it yet. Displaying an incorrect explanation is probably worse than no explanation, though, in retrospect.
14-59/15 - Every 15th minute starting with the 14th
up to and including the 59th.
2-57/2 - Every 2nd minutes starting with the 2nd
up to and including the 56th.
A choice needs to be made - the direct plain English parse is quite long, and not always easy to read.It would also be great to support the seconds field.
From "man 5 crontab":
cron(8) examines cron entries once every minute.
The time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
A field may be an asterisk (*), which always stands
for "first-last".
Ranges of numbers are allowed. Ranges are two
numbers separated with a hyphen. The specified
range is inclusive.
For example, 8-11 for an "hours" entry specifies
execution at hours 8, 9, 10 and 11.
Lists are allowed. A list is a set of numbers (or
ranges) separated by commas. Examples: "1,2,5,9",
"0-4,8-12". assert(cronchecker(cronstring(input)) == input)Results are a little harder to read. This other site gives more natural sentences.
That said, it's a pretty great product and you should check them out!
Arcane, seriously? What kind of syntax would be modern and clear in your opinion? YAML? JSON? XML probably, with a nice 150-page XTBJSPCOSDF (Extensible Time-Based Job Scheduling for POSIX-Compatible Operating Systems Description Framework) spec? ;)
Personally, I think this is pretty straightforward:
#minute hour mday month wday command
30 1 * * * /bin/sh /etc/daily
30 3 * * 6 /bin/sh /etc/weekly
30 5 1 * * /bin/sh /etc/monthlyis not a very good example. It will launch a shell which will change to the specified directory and then terminate. (It might produce an error message if the directory doesn't exist.)
I also turn to http://cronwtf.github.io when I need to sanity-check my crontab, which is a little more verbose and includes JSSpec tests.