How to schedule tasks in GNU/Linux

cron is a time-based job scheduler in Unix-like computer operating systems, cron is used to schedule jobs at fixed times, dates, or intervals; cron runs every minute and detects if there is a new command or task (reading the files /etc/crontab, /etc/cron.d/* and /var/spool/cron/crontabs/*) to run.

crontab is the program that maintains: installs, uninstalls or lists the scheduled tasks, each user has his own crontab file in /var/spool/cron/crontabs/username which should not be edited directly else using the crontab utility. If the /etc/cron.allow exists, your user must appear in it to be able to schedule tasks, if it does not exist and /etc/cron.deny exists your user must not appear in it; if neither of them exist then it depends on the default OS configuration.

crontab is also the file that contains instructions for executing scheduled tasks. A line in the crontab file can set an environment variable (var-name=value) or schedule the execution of a command; blank lines and lines beginning with # (comments) are ignored. The format for scheduling a task is:

# (0-59) (0-23)    (1-31)             (1-12)       (0 - 7)
    min   hour   day-of-the-month      month    day-of-the-week	       command
  • * = all posibles values
  • value1-value2 defines a range of values
  • value1,value3,value3 defines a list
  • value1-value2/step defines a step inside the range
  • 0 or 7 = Sunday in the day of the week

Ejemplos

Make a backup of my home DIR

Send my home DIR last changes to a remote server every 5 minutes between 9:00 a.m – 6:00 p.m

*/5 9-18 * * * rsync -avz $HOME remote-server:/mnt/backup

Read 16 Practical examples of the rsync command for sync behaviour.

Backup my DB

Make a backup to my databases every day and every hour.

0 */1 * * * mysqldump -u root -pclave --all-databases > $HOME/bds.sql

Send a reminder

Email a remainder on the 1st and 15th of each month at 2:15 p.m

15 14 1,15 * * mail -s 'Recordatorio' myemail@myemailserver.com < /dev/null

Backup my projects

Send my projects last changes to a remote server every 2 hours between 8:30 a.m – 5:30 p.m

30 8-17/2 * * 1-5  rsync -avz $HOME/prt servidor:/mnt/backup/prt

Read 16 Practical examples of the rsync command for sync behaviour.

All together

# These are enviroment variables
# Use for command execution
SHELL=/bin/bash
# Cron will send notification to this address.
MAILTO="Put your email here"
*/5 9-18 * * * rsync -avz $HOME remote-server:/mnt/backup
0 */1 * * * mysqldump -u root -pclave --all-databases > $HOME/bds.sql
15 14 1,15 * * mail -s 'Recordatorio' myemail@myemailserver.com < /dev/null
30 8-17/2 * * 1-5  rsync -avz $HOME/prt servidor:/mnt/backup/prt

To edit your crontab file execute this command

crontab -e

Further readings

– man cron
– man 1 crontab
– man 5 crontab

About the Author

Leave a Reply

%d bloggers like this: