Scheduling Tasks on Linux Using Cron

The cron software utility is a time-based job scheduler in linux like operating systems. Cron is driven by a crontab (cron table) file, a configuration file that specifies shell commands to run periodically on a given schedule. The crontab files are stored where the lists of jobs and other instructions to the cron daemon are kept. Users can have their own individual crontab files and often there is a system-wide crontab file (usually in /etc or a subdirectory of /etc) that only system administrators can edit.

Scheduling Task on Linux Using Cron

It is useful to send out emails on system or program statistics, do regular system maintenance, make backups, or do any task you can think of. There are similar programs on other Operating Systems. On Mac OS X, cron has been replaced with another daemon called launched. On Windows, you have the apply named “Task Scheduler”. If you are craving a GUI for Linux, Gnome-based systems like Ubuntu, include Gnome Schedule which acts as a nice front end for cron.

The Linux System Crontab is the command used to list the tables used by the cron daemon. We also call the files used to load the cron daemon, crontab files. When we use the crontab –e command, we are editing the crontabs in /var/spool. The files located here are in a different format and should never be edited directly.

The Linux System Crontab Commands

file Load the crontab data from the specified file. If the file is a dash (“–“), the crontab data is read from standard input
-u user Specifies the user whose crontab is to be viewed or modified. If this option is not given, crontab opens the crontab of the user who ran crontab. Note: using su to switch users can confuse crontab, so if you are running it inside of su, always use the -u option to avoid ambiguity.
-l Display the current crontab.
-r Remove the current crontab.
-e Edit the current crontab, using the editor specified in the environment variable VISUAL or EDITOR

The Linux System Crontab Format

Each line in the crontab file can be a variable definition or cron command. Don’t forget to terminate the last command with a newline character, by pressing the enter key. You can also end the last statement with a %. This is the most common error that will cause your command to fail, in this case, an error will not be displayed. Cron commands have a distinct pattern that allows you to specify custom recurring times. There are five fields used specify the time and the command to run.

Format : (Minute 0-59) (Hour 0-23) (Day of Month 1-31) (Month 1-12) (Day of week 0-7) (Command)
Examples :

Here are several examples that will run a backup script at different time intervals:

0 5 1 * * ~/backup-home.sh

What we have specified here is to run this backup-home.sh script at 5:00 AM every 1st of the month. The * signifies a wild card. In this example, the task is run on all months and any day of the week.

0 5 1,15 * * ~/backup-home.sh

In this modified example we used a comma on the day of the month field to signify that we want this task run on the 1st and 15th of each month.

0 5 1 12/3 * ~/backup-home.sh

In this example, 12/3 represents a step value. This means the command will be run every quarter on the 1st of the month at 5 AM.

* 17-20 * * * ~/backup-home.sh

Here this backup script would run at hours 17,18,19 and 20 every day.

* * * * * ~/backup-home.sh

This example would run every single minute. Be careful if you think you have to use this one!

*/2 * * * * ~/backup-home.sh

Combining some ideas here, this command includes a step value and would run every two minutes.

@reboot ~/backup-home.sh

Here we are using a special time signification @reboot will run once after every reboot. There are other special time keywords that you can use. Here is a full list:

  • @reboot : Run once after reboot.
  • @yearly : Run once a year
  • @annually : Run once a year
  • @monthly : Run once a month
  • @weekly : Run once a week
  • @daily : Run once a day
  • @hourly : Run once an hour

Cron.hourly Cron.daily Cron.weekly Cron.monthly

For easy no fuss use of cron jobs, just create a file in one of these directories located in /etc/ The task will be run according to a folder it is placed in. Doing it this way gives you less control over the time, however (When during the week? Sometimes, for sure).

To know details of linux commands, you can go through our blog- Linux commands that you should know about- Part 1. 

Do you need to develop a web solution for your business on open source platform? Then you might need some help. Solace team is expert in Linux and is there to help you for development in linux. Contact us for any web development solution which lifts your business to the success it deserves.