Penguin
Note: You are viewing an old revision of this page. View the current version.

Introduction

Scheduling under Linux is provided by the cron(8) daemon. It reads a file called a crontab(5), but you don't necessarily need to edit any cron table directly.

Running commands at standard intervals

On most systems, the easiest thing you can do if you simply want your command to be run once an hour, or once a day, or once a week, etc, is to put a script in the corresponding one of the /etc/cron.{hourly,daily,weekly,monthly} etc directories. This is a simple Shell script, not a crontab(5) file. On most systems, all the "daily" scripts will be run sometime in the wee hours, such as 4am.

Running commands at custom times/intervals

If you need to run commands at custom times or intervals, you need to know the crontab(5) line format described in the ManPage. Read that now, if you don't know about it yet.

The main, system wide crontab(5) is /etc/crontab, but on most LinuxDistributions, there is a /etc/cron.d directory where you should put single line crontab files, eg
  1. /etc/cron.d/exim: crontab fragment for exim
  2. Run queue every 15 minutes

08,23,38,53 * * * * mail if [ -x /usr/sbin/exim -a -f /etc/exim/exim.conf?; then /usr/sbin/exim -q ; fi

This will be run every 15 minutes (8 past the hour, 23 past the hour etc) on every hour, every day, etc, as user mail. The initial fields are delimited by spaces, up to the the command (if [? ... fi), which is taken as a whole to the end of the line. (The if bit is a sanity check to ensure a runnable exim binary and an exim.conf file exist.)

Users can also have their own cron tables, with commands run under their respective UID. These should be manipulated using the crontab(1) command. crontab -e will launch your configured interactive TextEditor on your user crontab, which generally resides under /var/spool/cron.

Running commands at standard intervals, revisited, and more

With Vixie Cron (used in *BSD and some LinuxDistributions such as Debian and RedHat) you can use @reboot instead of the time fields. Cron will then run that command at system startup. This allows regular users to launch their own daemons, such as fetchmail(1). This feature first appeared in FreeBSD 4.1.