Linux - Scheduling tasks

Task scheduling, is the ability for the OS to automatically perform a task (an application, control, ...) at regular intervals or at specific times. Generally this type of process is used to automate backups (called backup), especially at times when system usage is low.

The Unix-based systems (e.g Linux) have an application (actually a demon) for this purpose. It is called "cron".

Cron is based on a table referencing the tasks to be executed (as well as the time for execution of the tasks: year, month, day, hour and minutetc).

Cron consists of:

a daemon : crond, that is to say, a memory-resident program that will automatically launch the tasks according to the cron table

: crond, that is to say, a memory-resident program that will automatically launch the tasks according to the cron table a command: crontab to edit the table cron (actually crond ) is usually located in the /usr/sbin or /sbin in recent distributions.

to edit the table

To determine the location of crond on your linux distribution, type the following command:

whereis crond

The crontab command will only edit the table for the current user. This file is located in:

/var/spool/cron/crontabs/user

Thus for the root user, the cron table will be stored in:

/var/spool/cron/crontabs/root

To edit the cron table, just run the following command:

crontab -e

This command will stat the Vi editor with the current table (the first launch of crontab).

Each entry in the table (each line) corresponds to a task at hand and is denoted as follows:

mm hh dd MMM DDD task > log

In this syntax:

mm represents the minutes (0-59)

represents the minutes (0-59) hh represents hour (0 to 23)

represents hour (0 to 23) dd is the day (1 to 31)

is the day (1 to 31) MMM represents the month (1 to 12) or abbreviated name of the month (JAN, FEB, MAR....)

represents the month (1 to 12) or abbreviated name of the month (JAN, FEB, MAR....) JJJ is the abbreviated name of the day or the number corresponding to the day of the week (0 is Sunday, 1 is Monday, ...)

is the abbreviated name of the day or the number corresponding to the day of the week (0 is Sunday, 1 is Monday, ...) task represents a command or shell script to be executed

represents a command or shell script to be executed log is the name of a file in which to store the operations log. If the > log is not specified, cron automatically send a confirmation b email. To avoid this, simply use /dev/null.

For each unit of time (minute / hour / ...) the possible notations are possible:

- *: At each time unit

- 2-5: time units (2,3,4,5)

- */3: All three units of time (0,3,6, ...)

- 5,8: time units (5 and 8)

In our example we will create a log of the available free disk space (in the /tmp/log_dt file) using the df command at specified time intervals:

Every day at 23:30:

30 23 * * * df >>/tmp/log_dt

The first day of every month at 23:30:

30 23 1 * * df >>/tmp/log_dt

Every Monday at 22:28:

28 22 * * 1 df >>/tmp/log_dt

2nd to 5th of each month at 10:12

12 10 2-5 * * df >>/tmp/log_dt

All even-numbered days of the month at 23:59

59 23 */2 * * df >>/tmp/log_dt

It is also possible to automatically execute more complex commands using a shell script. As a first step, you will need to create a script. Then declare it as a task in the cron table.

The following shell script exports records of MySQL (the ccmusers table for example) in a file whose name is ccmusers followed by the date in the form day-month-year-hour-minute:

#!/bin/sh DATE=$(date +%d-%m-%Y-%H-%M) /usr/local/mysql/bin/mysqldump -u root ccmusers > /home/backup/ccmusers${DATE}.sql

To make a daily backup (at 23:59) of the ccmusers table, just add the following entry in the cron table:

59 23 * * * /home/backup/backumd >>/dev/null

Original document published on CommentcaMarcheet

Spread the love

Leave a Comment