Crontab Reference


Introduction

Crontab is used to run jobs at specific times/dates and can be defined under specified users. There are two options for creating cron jobs; creating them at the system level, or at user level. It is generally best practice to create jobs at the user level (crontab -e) rather than at system level (/etc/crontab).

Usage

System Cron

Create system cron entry:
vim /etc/crontab

List cron entries:
cat /etc/crontab

User Cron

Create user cron entry:
crontab -e

List cron entries:
crontab -l

Cron Format

.---------------- minute (0 - 59)
|  .------------- hour (0 - 23)
|  |  .---------- day of month (1 - 31)
|  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
|  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
|  |  |  |  |
*  *  *  *  *     user-name     command to be executed

The user-name field only applies to system crontabs (/etc/crontab, /etc/cron.d/). In a user crontab (crontab -e) you omit it — the job already runs as that user.

Shortcuts

Cron accepts these nicknames in place of the five time fields:

Nickname Equivalent
@reboot Run once at startup
@hourly 0 * * * *
@daily 0 0 * * *
@weekly 0 0 * * 0
@monthly 0 0 1 * *
@yearly 0 0 1 1 *

Practical Example

I want to create a scheduled system restart for 0600 EST every day.

Change time zone to EST:
timedatectl set-timezone US/Eastern

Verify time:
timedatectl

Create system cron entry:
vim /etc/crontab

Add cron job at end of crontab:
0 6 * * * root shutdown -r now

Tips & Gotchas

  • Minimal environment. Cron runs with a bare PATH (often just /usr/bin:/bin) and no shell profile. Use absolute paths to binaries, or set PATH= at the top of the crontab.
  • Capture output. Cron mails job output to the user; if no mail is configured, it’s silently lost. Redirect instead:
    0 6 * * * /path/script.sh >> /var/log/script.log 2>&1
  • Confirm it fired. crontab -l lists the current jobs; grep CRON /var/log/syslog (or journalctl -u cron) shows whether one actually ran.

References

  • https://man7.org/linux/man-pages/man5/crontab.5.html
  • https://crontab.guru/