Job Scheduling

One time job schedule.

at” command is used to schedule a job for a particular time or interval. But we can’t use at command for any recurring tasks. For recurring tasks use Linux crontab.

at” command can be useful for taking one time backup, sending email as reminder at specified time, executing a script at specified time etc.

Schedule job using at command

Syntax :

# at time
Task
Ctrl+d to save it.

Schedule “sh load.sh” command to be executed on next 6:00 AM once.

# at 6:00 AM
at> sh load.sh
at> < EOT >
job 1 at 2016-05-10 06:00

Schedule “sh load.sh” command to be executed at 6:00 AM till 7 days from now.

# at 6:00 AM + 7days
at> sh load.sh
at> < EOT >
job 3 at 2016-05-17 06:00

To check list of at jobs.

# at -l
1 2016-05-10 06:00 a root
3 2016-05-17 06:00 a root

or

# atq
1 2016-05-10 06:00 a root
3 2016-05-17 06:00 a root

To check what is scheduled

# at -c job id

# at -c 3

To remove a job

# atrm job id
# atq
1 2016-05-10 06:00 a root
3 2016-05-17 06:00 a root

# atrm 3
# atq
1 2016-05-10 06:00 a root

Schedule task at coming 09:00 AM.

# at 09:00 AM

Schedule task at 01:00 AM on coming Sunday.

# at 01:00 AM Sun

Schedule task at 06:00 AM on coming 5th July.

# at 06:00 AM July 5

Schedule task to execute at mid night.

# at midnight

Schedule task at 09:00 AM on coming 12th Dec 2016.

# at 09:00 AM 12/12/2016
# at 09:00 AM 12.12.2016

Schedule task at 12:00 PM on same date at next month.

# at 12:00 PM next month

Schedule task at 07:00 AM tomorrow.

# at 07:00 AM tomorrow

Schedule task to execute just after 1 hour.

# at now + 1 hour

Schedule task to execute just after 30 minutes.

# at now + 30 minutes

Schedule task to execute just after 1 and 2 weeks.

# at now + 1 week
# at now + 2 weeks

Schedule task to execute just after 1 and 2 years.

# at now + 1 year
# at now + 2 years

Recurring Job schedule

In Linux Operating system, it is possible to create a schedule for commands or script files to be executed automatically within a specified period of time, on a specified date.

Linux comes with the automated task utility task i.e cron. The cron daemon on Linux runs jobs in the background at specific times.

The jobs that you want to run with cron can be scheduled in various ways. The most common way is to edit a file which is known as your crontab.

Normally, each user has his/her own and is able to schedule jobs by editing it.

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.

Each line of a crontab file represents a job, and looks like this

$ cd /etc/
$ cat crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs
# Example of job definition:
# .------------ 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

Nonstandard predefined scheduling definitions

Some cron implementations support the following non-standard macros

Entry Description Equivalent to
@yearly (or @annually) Run once a year at midnight of 1 January 0 0 1 1 *
@monthly Run once a month at midnight of the first day of the month 0 0 1 * *
@weekly Run once a week at midnight on Sunday morning 0 0 * * 0
@daily Run once a day at midnight 0 0 * * *
@hourly Run once an hour at the beginning of the hour 0 * * * *
@reboot Run at startup N/A

Cron permissions

Below two files play an important role

  • /etc/cron.allow – If this file exists, it must contain your username for you to use cron jobs.
  • /etc/cron.deny – If the cron.allow file does not exist but the /etc/cron.deny file does exist then, to use cron jobs, you must not be listed in the /etc/cron.deny file.

To display the current crontab

$ crontab -l

To edit the crontab, use below command

$ crontab -e

To delete crontab, use below command

$ crontab -r

Use cases :

Run backup.sh script at 01:30 AM daily.

30 01 * * * /bin/bash /home/ops/scripts/backup.sh

Run load.sh script daily every hour from 02 AM to 08 AM

00 02-08 * * * /bin/bash /home/ops/load.sh

Run monday.sh every Monday, at 9 A.M. and 6 P.M

00 09-18 * * Mon /bin/bash /home/ops/monday.sh

Advertisements