In a system repetitive tasks such as making backups, system updates can turn out to be very time consuming, in this article we discuss how to automate this process using cron, a linux utility.
Table of contents.
- Editing crontab.
- Creating a cronjob.
- Removing crontab tasks.
- Access control.
Cron from the greek word chronos meaning time. cron on the other hand is a system process that automatically performs tasks specified by a schedule.
The cron deamon will read from the crontab(cron tables) where a list of predefined commands and scripts which are scheduled to run at scheduled times will reside.
A cron table will consist of such syntax per line.
a b c d e /directory/command output
- The first letters a, b, c, d, e specify the time, date and recurrence of the cron job.
|a||minute||0-59||30 * * * *||A cron job is started every time the system clock is at 30 minutes.|
|b||hour||0-23||0 9 * * *||A cron job is started every time the system clock shows 9am(9pm is 21).|
|c||day||0-31||0 0 20 * *||A cron job is started every 20th day of the month.|
|d||month||0-12||0 0 0 1 * *||A cron job is started every January.|
|e||week days||0-7||0 0 * * 2||A cron job is started every Tuesday.|
/directory/command specifies the location and script that will be executed at the specified time.
output: This is how the system is to alert the user that the job has been executed. By default, cron will send an email to the owner of the crontab file, this can also be disabled.
Operators: These are special characters that perform operations on cron field values, they include;
*: This specifies that tasks keep running all days of the week and months.
,: Used to separate individual values.
-: Used to indicate a range of values.
/: divides a value into steps, e.g (/7 represents every seventh).
We can view the crontab as follows;
To edit the cron table we write,
For the first time it will ask you to select an editor, otherwise the default editor is vi, if you are not familiar with vi be sure to check out the link provided in the references section.
Creating a cronjob.
To test this out lets write a simple cron job. First we shall write a script involving a single command.
We have the script file below.
sudo tcpdump -c10 -i eth0 | sed -n '/10.0.2/p' > output.txt
dump.sh runs the tcpdump command which sniffs network traffic on the eth0 interface, then it pipes the output to the sed command which filters all lines containing the ip address pattern 10.0.2 and redirects the output to output.txt file.
Coming to crontab.
We edit the crontab file as follows.
crontab -e 30 21 18 1 2 ~/Documents/dump.sh
First we go into the the crontable(at the bottom, new line)
The command states that at 9.30(evening) on the tuesday of the 18th of january, the script dump.sh will be executed.
You can change the dates and time to see how this works, make sure to generate some traffic and change the script file however.
After the time set has passed, you should see a new file output.txt created with tcp dumps only containing the specified pattern.
We can also edit other users' crontab tasks by writing,
crontab -e username -e
and to view a user's crontab entries we write,
crontab -u username -l
Other crontab examples are;
To run a script after every 3 minutes we can write,
*/3 * * * * ~/Documents/scripts/script.sh
To run a script for only two days of the week say fridays and mondays, we write,
0 17 * * fri,mon ~/Documents/scripts/script.sh
To run multiple scripts in one cron, we write,
* * * * * ~/Documents/scripts/script1.sh; ~/Documents/scripts/script2.sh
We can also use shortcuts such as;
@reboot: run once after rebooting. i.e 0 0 1 1 *
@yearly: run once every year. i.e 0 0 1 1 *
@annually: run once a year. i.e 0 0 1 * *
@monthly: run once every month. i.e 0 0 * * 0
@weekly: run once every week. i.e 0 0 * * 0
@daily: run once every day. i.e 0 0 * * *
@hourly: run once every hour i.e 0 * * *
To perform a system clean up on a weekly basis, we write,
To perform a task when the system reboots, we write,
Removing contab tasks.
To remove crontab task we write.
Users can make mistakes e.g, running cron tasks that require a lot of system resources such as network, cpu or memory, during the day when other users depend on these resources, this may cause starvation for other users.
To prevent this system administrators can limit access by creating a /etc/cron.allow file which will have all users who are permitted to create cron jobs.
cron has the assumption that the host computer will be running at all times and thus is a computer is off during the period in which cron jobs are supposed to be executed, the jobs won't be executed until the next time they are scheduled.
Anacron solves this problem by running programs that were previously skipped.
This is useful for PCs that are put into sleep mode or off during the shceduled times for cron jobs.
Anacron operates in a way that, as soon as a machine is booted up, it will check to see if there are skipped jobs if there are, they are only executed once.
A crontab (cron table) is where we store tasks that we have scheduled, cron checks this table to see if there are any tasks to be executed.
Cron can be used for automating tasks whether it is creating backups or scheduling updates, we can also use it to delete old log files, purge database tables, automation or even system maintenance.