Useful Cron Examples

Linux crontab has six fields. 1-5 fields defines the date and time of execution. The 6’th fields are used for command or script to be executed.The Linux crontab syntax are as following:

[Minute] [hour] [Day_of_the_Month] [Month_of_the_Year] [Day_of_the_Week] [command]

To add or update job in crontab, use below command. It will open crontab file in the editor where a job can be added/updated.

crontab -e

By default, it will edit crontab entries of current logged in user. To edit other user crontab use command:

crontab -u username -e

To view crontab entries of current user:

crontab -l

Use -u followed by username to view crontab entries of the specified user.

crontab -u username -l
0 2 * * * /bin/sh script.sh

Below example command will execute at 5 AM and 5 PM daily. You can specify multiple time stamp by comma separated.

0 5,17 * * * /scripts/script.sh

Generally, we don’t require any script to execute on every minute but in some case, you may need to configure it.

* * * * *  /scripts/script.sh
0 17 * * sun  /scripts/script.sh
*/10 * * * * /scripts/monitor.sh
* * * jan,may,aug *  /script/script.sh
0 17 * * sun,fri  /script/script.sh

To schedule a script to execute a script on first Sunday only is not possible by time parameter, But we can use the condition in command fields to do it.

0 2 * * sun  [ $(date +%d) -le 07 ] && /script/script.sh
0 */4 * * * /scripts/script.sh

To schedule a task to execute twice on Sunday and Monday only.

0 4,17 * * sun,mon /scripts/script.sh

To schedule a task to execute on every 30 seconds is not possible by time parameters, But it can be done by schedule same cron twice like below.

* * * * * /scripts/script.sh
* * * * *  sleep 30; /scripts/script.sh

To configure multiple tasks with single cron, Can be done by separating tasks by the semicolon ( ; ).

* * * * * /scripts/script.sh; /scripts/scrit2.sh

@yearly timestamp is similar to “0 0 1 1 *”. It will execute task on the first minute of every year.

@yearly /scripts/script.sh

@monthly timestamp is similar to “0 0 1 * *”. It will execute a task in the first minute of the month.

@monthly /scripts/script.sh

@weekly timestamp is similar to “0 0 1 * mon”. It will execute a task in the first minute of the week.

@weekly /bin/script.sh

@daily timestamp is similar to “0 0 * * *”. It will execute a task in the first minute of every day.

@daily /scripts/script.sh

@hourly timestamp is similar to “0 * * * *”. It will execute a task in the first minute of every hour.

@hourly /scripts/script.sh

@reboot is useful for those tasks which you want to run on your system startup. It will be same as system startup scripts.

@reboot /scripts/script.sh

By default, cron sends details to the current user where cron is scheduled. If you want to redirect it to your other account, can be done by setup MAIL variable like below

# crontab -l
MAIL=bob
0 2 * * * /script/backup.sh

I recommend keeping a backup of all jobs entry in a file. This will help you to recover crons in case of accidental deletion.

Check current scheduled cron:

# crontab -l
MAIL=rahul
0 2 * * * /script/backup.sh

Backup cron to text file:

# crontab -l > cron-backup.txt
# cat cron-backup.txt
MAIL=rahul
0 2 * * * /script/backup.sh

Removing current scheduled cron:

# crontab -r
# crontab -l
no crontab for root

Restore crons from text file:

# crontab cron-backup.txt
# crontab -l
MAIL=rahul
0 2 * * * /script/backup.sh