Copyright 2011-2021 Josiah Carlson
Released under the LGPL license version 2.1 and version 3 (you can choose which you'd like to be bound under).
This package intends to offer a method of parsing crontab schedule entries and determining when an item should next be run. More specifically, it calculates a delay in seconds from when the .next() method is called to when the item should next be executed.
Comparing the below chart to http://en.wikipedia.org/wiki/Cron#CRON_expression you will note that W and # symbols are not supported.
Field Name | Mandatory | Allowed Values | Default Value | Allowed Special Characters |
---|---|---|---|---|
Seconds | No | 0-59 | 0 | * / , - |
Minutes | Yes | 0-59 | N/A | * / , - |
Hours | Yes | 0-23 | N/A | * / , - |
Day of month | Yes | 1-31 | N/A | * / , - ? L |
Month | Yes | 1-12 or JAN-DEC | N/A | * / , - |
Day of week | Yes | 0-6 or SUN-SAT | N/A | * / , - ? L |
Year | No | 1970-2099 | * / , - |
If your cron entry has 5 values, minutes-day of week are used, default seconds is and default year is appended. If your cron entry has 6 values, minutes-year are used, and default seconds are prepended.
As such, only 5-7 value crontab entries are accepted (and mangled to 7 values, as necessary).
Examples of supported entries are as follows:
* */5 7/8 3-25/7 3,7,9 0-10,30-40/5
For month or day of week entries, 3 letter abbreviations of the month or day can be used to the left of any optional / where a number could be used.
For days of the week:
mon-fri sun-thu/2
For month:
apr-jul mar-sep/3
pip install crontab
>>> from crontab import CronTab >>> from datetime import datetime >>> # define the crontab for 25 minutes past the hour every hour ... entry = CronTab('25 * * * *') >>> # find the delay from when this was run (around 11:13AM) ... entry.next() 720.81637899999998 >>> # find the delay from when it was last scheduled ... entry.next(datetime(2011, 7, 17, 11, 25)) 3600.0
At most one of 'day of week' or 'day of month' can be a value other than '?' or '*'. We violate spec here and allow '*' to be an alias for '?', in the case where one of those values is specified (seeing as some platforms don't support '?').
This module also supports the convenient aliases:
@yearly @annually @monthly @weekly @daily @hourly
Example full crontab entries and their meanings:
30 */2 * * * -> 30 minutes past the hour every 2 hours 15,45 23 * * * -> 11:15PM and 11:45PM every day 0 1 ? * SUN -> 1AM every Sunday 0 1 * * SUN -> 1AM every Sunday (same as above) 0 0 1 jan/2 * 2011-2013 -> midnight on January 1, 2011 and the first of every odd month until the end of 2013 24 7 L * * -> 7:24 AM on the last day of every month 24 7 * * L5 -> 7:24 AM on the last friday of every month 24 7 * * Lwed-fri -> 7:24 AM on the last wednesday, thursday, and friday of every month