ruk·si

cron

Updated at 2014-11-02 15:50

cron is a time-based job scheduler in Unix-like operating systems. With it, you can specify machine to run a command or script repeatedly following a schedule.

crontab is the easiest way to add a scheduled job. This lets you edit user-specific cron jobs.

# Open user cron jobs in a text editor. (cron table edit)
crontab -e
* * * * * echo Hello
# Each asterisk can be replaced with an integer:
# minutes (0 - 59)
# | hour (0 - 23)
# | | day of month (1 - 31)
# | | | month (1 - 12)
# | | | | day of week (0 - 6 where 0 is Sunday)
# | | | | |
  0 0 1 1 *       # yearly at 00:00 1.1.XXXX
  0 0 1 * *       # monthly at 00:00 1.X.XXXX
  0 0 * * 0       # weekly at 00:00 on Sunday
  0 0 * * *       # daily at 00:00
  0 * * * *       # hourly at XX:00
  * * * * *       # every minute
# Append something at the end of crontab.
(crontab -l; echo "* * * * * echo Hello") | crontab -

Make sure your cron job is running. Create a temporary file as a part of the cron command to help with debugging.

* * * * * touch /tmp/cmd_ran; echo Hello World 1>> /var/log/cron.log 2>&1

By default, cron logging is done by email. You can redirect the standard streams for alternative logging.

# By default, cron will email the user about the cron job.
* * * * * echo Hello

# To use a single log file instead:
* * * * * echo Hello 1>> /var/log/cron.log 2>&1

# To use multiple log files instead:
* * * * * echo Hello 1>> /var/log/cron.log 2>> /var/log/cron_errors.log

# To disable logging:
* * * * * echo Hello World 1>> /dev/null 2>&1

Prefer file based cron definitions over crontab. A more robust way to define cron jobs is to use /etc/cron.d directory. Just add a file with cron job definitions. Filename cannot contain dots (.). Note that files in cron.d must have one blank line at the end.

/etc/cron.d/my-application-name

cron.d definitions are contextless. You have to add executing user after the schedule when defining cron jobs in /etc/cron.d/*.

# /etc/cron.d/my-application-name
* * * * * root echo Hello
* * * * * root echo Hello 1>> /var/log/cron.log 2>&1
* * * * * root echo Hello 1>> /var/log/cron.log 2>> /var/log/cron_errors.log
* * * * * root echo Hello 1>> /dev/null 2>&1

Sources