← All cheat sheets

CRONTAB

Plain-text reference · 7 KB. Read it, search it (Ctrl-F) or print it.

Cron is a time-based job scheduler in Unix-like systems.

CRONTAB COMMANDS#

crontab -e              # Edit current user's crontab
crontab -l              # List current user's crontab
crontab -r              # Remove current user's crontab
crontab -u user -e      # Edit another user's crontab (root)
crontab -u user -l      # List another user's crontab
crontab file            # Install crontab from file

CRONTAB SYNTAX#

┌───────────── minute (0 - 59)
│ ┌───────────── hour (0 - 23)
│ │ ┌───────────── day of month (1 - 31)
│ │ │ ┌───────────── month (1 - 12 or jan-dec)
│ │ │ │ ┌───────────── day of week (0 - 7 or sun-sat, 0 and 7 = Sunday)
│ │ │ │ │
* * * * * command

FIELD VALUES#

*       Any value
,       Value list separator
-       Range of values
/       Step values

SPECIAL CHARACTERS#

*       Every value
*/n     Every n intervals
n-m     Range from n to m
n,m     Values n and m
n-m/s   Range with step

TIME EXAMPLES#

* * * * *           # Every minute
0 * * * *           # Every hour (at minute 0)
0 0 * * *           # Daily at midnight
0 0 * * 0           # Weekly on Sunday
0 0 1 * *           # Monthly on 1st
0 0 1 1 *           # Yearly on Jan 1st

MINUTE EXAMPLES#

0 * * * *           # At minute 0
30 * * * *          # At minute 30
*/5 * * * *         # Every 5 minutes
*/15 * * * *        # Every 15 minutes
0,30 * * * *        # At 0 and 30 minutes
15-45 * * * *       # Minutes 15-45

HOUR EXAMPLES#

0 0 * * *           # Midnight
0 6 * * *           # 6:00 AM
0 18 * * *          # 6:00 PM
0 */2 * * *         # Every 2 hours
0 9-17 * * *        # Every hour 9 AM - 5 PM
0 0,12 * * *        # Midnight and noon

DAY OF MONTH EXAMPLES#

0 0 1 * *           # 1st of every month
0 0 15 * *          # 15th of every month
0 0 1,15 * *        # 1st and 15th
0 0 */2 * *         # Every 2 days
0 0 1-7 * *         # First week

MONTH EXAMPLES#

0 0 1 1 *           # January 1st
0 0 1 */3 *         # Every 3 months
0 0 1 1,4,7,10 *    # Quarterly
0 0 1 6-8 *         # June-August

DAY OF WEEK EXAMPLES#

0 0 * * 0           # Sunday
0 0 * * 1           # Monday
0 0 * * 1-5         # Weekdays (Mon-Fri)
0 0 * * 6,0         # Weekends (Sat, Sun)
0 0 * * mon         # Monday (named)
0 0 * * mon-fri     # Weekdays (named)

SPECIAL STRINGS#

@reboot             # Run once at startup
@yearly             # 0 0 1 1 * (yearly)
@annually           # Same as @yearly
@monthly            # 0 0 1 * * (monthly)
@weekly             # 0 0 * * 0 (weekly)
@daily              # 0 0 * * * (daily)
@midnight           # Same as @daily
@hourly             # 0 * * * * (hourly)

PRACTICAL EXAMPLES#

# Every 5 minutes
*/5 * * * * /path/to/script.sh

# Every hour at minute 30
30 * * * * /path/to/script.sh

# Daily at 2:30 AM
30 2 * * * /path/to/backup.sh

# Weekly on Sunday at midnight
0 0 * * 0 /path/to/weekly.sh

# Monthly on 1st at 3 AM
0 3 1 * * /path/to/monthly.sh

# Every weekday at 9 AM
0 9 * * 1-5 /path/to/workday.sh

# Every 15 minutes during business hours
*/15 9-17 * * 1-5 /path/to/script.sh

# Twice daily
0 6,18 * * * /path/to/script.sh

# First Monday of month
0 0 1-7 * 1 /path/to/script.sh

ENVIRONMENT VARIABLES#

# Set at top of crontab
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
MAILTO=admin@example.com
HOME=/home/user

# Example crontab with environment
SHELL=/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
MAILTO=admin@example.com

0 * * * * /path/to/script.sh

OUTPUT HANDLING#

# Discard all output
0 * * * * /path/to/script.sh > /dev/null 2>&1

# Log output to file
0 * * * * /path/to/script.sh >> /var/log/cron.log 2>&1

# Log with timestamp
0 * * * * /path/to/script.sh >> /var/log/cron.log 2>&1 && echo "$(date)" >> /var/log/cron.log

# Email only errors
0 * * * * /path/to/script.sh > /dev/null

# Different log files
0 * * * * /path/to/script.sh >> /var/log/script.log 2>> /var/log/script.err

SYSTEM CRONTABS#

/etc/crontab                    # System crontab
/etc/cron.d/                    # Additional cron files
/etc/cron.hourly/               # Scripts run hourly
/etc/cron.daily/                # Scripts run daily
/etc/cron.weekly/               # Scripts run weekly
/etc/cron.monthly/              # Scripts run monthly

# System crontab format (includes user field)
# min hour dom mon dow user command
0 * * * * root /path/to/script.sh

CRON ACCESS CONTROL#

/etc/cron.allow         # Users allowed (if exists)
/etc/cron.deny          # Users denied

# If cron.allow exists, only listed users can use cron
# If only cron.deny exists, all except listed can use cron

VIEW CRON LOGS#

# Debian/Ubuntu
grep CRON /var/log/syslog

# RHEL/CentOS
cat /var/log/cron

# Journalctl
journalctl -u cron
journalctl -u crond

COMMON ISSUES#

# Command not found - use full paths
0 * * * * /usr/bin/python3 /path/to/script.py

# Environment not set - source profile
0 * * * * . /home/user/.profile; /path/to/script.sh

# Permission denied
chmod +x /path/to/script.sh

# Not running - check cron service
systemctl status cron
systemctl status crond

DEBUGGING#

# Test command manually first
/path/to/script.sh

# Check cron is running
systemctl status cron

# Check syntax
crontab -l

# View logs
tail -f /var/log/syslog | grep CRON

# Verify mail delivery
cat /var/mail/username

CRONTAB FILE EXAMPLE#

# Environment
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=admin@example.com

# Backup database daily at 2 AM
0 2 * * * /home/user/scripts/backup_db.sh >> /var/log/backup.log 2>&1

# Clear temp files weekly
0 3 * * 0 find /tmp -type f -mtime +7 -delete

# System update check daily
0 6 * * * /usr/bin/apt update && /usr/bin/apt upgrade -y

# Health check every 5 minutes
*/5 * * * * /home/user/scripts/health_check.sh

# Report generation (Monday 9 AM)
0 9 * * 1 /home/user/scripts/weekly_report.sh

ALTERNATIVES#

# Systemd timers (modern replacement)
# See SYSTEMCTL cheatsheet

# anacron (for systems not always on)
/etc/anacrontab

# at command (one-time jobs)
at now + 1 hour
at 2:00 PM tomorrow

QUICK REFERENCE#

* * * * *   Every minute
0 * * * *   Every hour
0 0 * * *   Every day (midnight)
0 0 * * 0   Every Sunday
0 0 1 * *   Every month (1st)
0 0 1 1 *   Every year (Jan 1)

*/5 * * * * Every 5 minutes
0 */2 * * * Every 2 hours
0 9-17 * * * Hourly 9 AM-5 PM
0 0 * * 1-5 Weekdays midnight

crontab -e  Edit
crontab -l  List
crontab -r  Remove

Defensive reference on CyberRamen. Offensive / red-team sheets live on OffensiveRamen.com.