cron is the time-based job scheduler in Unix-like computer operating systems. cron enables users to schedule jobs (commands or shell scripts) to run periodically at certain times, dates or intervals. It is commonly used to automate system maintenance or administration.
Installation
There are many cron implementations, but none of them are installed by default as the base system uses systemd/Timers instead. See the Gentoo’s cron guide, which offers comparisons.
Packages available:
- cronie
- fcron
- dcronAUR
- vixie-cronAUR
- scron-gitAUR
Configuration
Activation and autostart
After installation, the daemon will not be enabled by default. The installed package likely provides a service, which can be controlled by systemctl. For example, cronie uses cronie.service.
Check /etc/cron.daily/ and similar directories to see which jobs are present. Activating cron service will trigger all of them.
Note: cronie provides the 0anacron hourly job, which allows for delayed runs of other jobs e.g. if the computer was switched off at the moment of standard execution.
Handling errors of jobs
cron registers the output from stdout and stderr and attempts to send it as email to the user’s spools via the sendmail command. Cronie disables mail output if /usr/bin/sendmail is not found. In order for mail to be written to a user’s spool, there must be an smtp daemon running on the system, e.g. opensmtpd. Otherwise, you can install a package that provides the sendmail command, and configure it to send mail to a remote mail exchanger. You can also log the messages by using the -m option and writing a custom script.
- Edit the
cronie.serviceunit. - Install esmtp, msmtp, opensmtpd, ssmtp, or write a custom script.
Example with msmtp
Install msmtp-mta, which creates a symbolic link from /usr/bin/sendmail to /usr/bin/msmtp. Restart cronie to make sure it detects the new sendmail command. You must then provide a way for msmtp to convert your username into an email address.
Then either add MAILTO line to your crontab, like so:
MAILTO=your@email.com
or create /etc/msmtprc and append this line:
aliases /etc/aliases
and create /etc/aliases:
your_username: your@email.com # Optional: default: your@email.com
Then modify the configuration of cronie daemon by replacing the ExecStart command with:
ExecStart=/usr/bin/crond -n -m '/usr/bin/msmtp -t'
Crontab format
The basic format for a crontab is:
minute hour day_of_month month day_of_week command
- minute values can be from 0 to 59.
- hour values can be from 0 to 23.
- day_of_month values can be from 1 to 31.
- month values can be from 1 to 12.
- day_of_week values can be from 0 to 6, with 0 denoting Sunday.
Spaces are used to separate fields. To fine-tune your schedule you may also use one of the following symbols:
| Symbol | Description |
|---|---|
| * | Wildcard, specifies every possible time interval |
| , | List multiple values separated by a comma. |
| – | Specify a range between two numbers, separated by a hyphen |
| / | Specify a periodicity/frequency using a slash |
For example, the line:
*/5 9-16 * 1-5,9-12 1-5 ~/bin/i_love_cron.sh
Will execute the script i_love_cron.sh at five minute intervals from 9 AM to 4:55 PM on weekdays except during the summer months (June, July, and August). More examples and advanced configuration techniques can be found below.
Besides, crontab has some special keywords:
@reboot at startup @yearly once a year @annually ( == @yearly) @monthly once a month @weekly once a week @daily once a day @midnight ( == @daily) @hourly once an hour
For example:
@reboot ~/bin/i_love_cron.sh
Will execute the script i_love_cron.sh at startup.
See more at: http://www.adminschoice.com/crontab-quick-reference