Linux Utility - Crontab (Cron) Scheduler

1 - About

The cron scheduler daemon (in ISC Cron) gets this data from crontab files.

Each user can have their own crontab, and though these are files in /var/spool/ , they are not intended to be edited directly.

Crontab is the program used to install, deinstall or list this file (tables)

3 - Crontab File

A crontab file consists of commands, one command per line, that execute automatically at the time specified by the first five fields of each command line.

[#] minute hour day-of-month month day-of-week command

where:

  • # is the comment mark to comment a line (Optional)
  • The time field minute hour day-of-month month day-of-week can be
Field Star One Number */n List of number Range of Value -
minute * means every hour 0 to 59 - 5 means on the 5th minute of the hour */5 means every 5 minutes 0,5,10,15,20,25,30,35,40,45,50,55 - Same as */5 (ie every 5 minutes) 10-15 means every minutes between 10 en 15
hour * means every hour 0 to 24 - 4 means at 4 hour */5 means every 5 hour 0,5,10,15,20 means at 0, 5,10,15 and 20 hour 5-10 means every hour between 5 and 10
day-of-month * means every day of the month 1 to 28/30 or 31 - 5 means the 5 of the month */5 means every 5 day 5,10,15,20 means at 5,10,15 and 20 day of the month 5-10 means every day between the 5th and 10th day of the month
month * means every month 1-12 - 5 means in May */5 means every 5 month 5,10 means in May and October 5-10 means in May, June, July, August, September, October
day of week * means every day 0-7 where 0 and 7 is Sunday - 5 means Friday */5 means every Friday 2,5 means Tuesday and Friday 0-3 means Sunday, Monday, Tuesday, Wednesday
  • command is the path the command

4 - Example

  • At 13h30 every Monday
30 13 * * 1
  • Each first of month at 0h00
0 0 1 * *

5 - How to

5.1 - Check the service

with Systemctl

systemctl status crond.service
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-11-04 09:45:20 CET; 6 months 23 days ago
 Main PID: 10103 (crond)
   CGroup: /system.slice/crond.service
           └─10103 /usr/sbin/crond -n

5.2 - Configure the service

with Systemctl with its unit file

cat /lib/systemd/system/crond.service
[Unit]
Description=Command Scheduler
After=auditd.service systemd-user-sessions.service time-sync.target

[Service]
EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=30s

[Install]
WantedBy=multi-user.target

5.3 - Configure the global run environment

The system file

cat /etc/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
  • When executing commands, any output is mailed to the owner of the crontab (or to the user specified in the MAILTO environment variable in the crontab, if such exists).

5.4 - List Job

crontab -l
# weekly gather statistics 
00  23    *  *  3 /home/gerard/scripts/gather_statistics.sh > /dev/null
# run the script to load tables between 22:00 and 10:00
*/5 22-23 *  *  * /home/gerard/scripts/loadTables.sh > /dev/null
*/5 00-09 *  *  * /home/gerard/scripts/loadTables.sh > /dev/null
#the first load check just after 22:00
03  22-23 *  *  * /home/gerard/check_load_is_running.sh
03  00-09 *  *  * /home/gerard/check_load_is_running.sh
#the last load check just before 10:00
58  09    *  *  * /home/gerard/check_load_is_running.sh

It will lists the jobs for the user who ran the command.

To see the job of another user:

  • -u option
crontab -u userName -l
  • logged in as the other user
  • or run it with sudo.

5.5 - View (Hourly|Daily|Weekly|Monthly) Cronjobs

cd /etc/cron.(hourly|daily|weekly|monthly)/
ls -l
cat filename

5.6 - View Software Specific Cronjobs

cd /etc/cron.d/
ls -l
cat filename

5.7 - Create / Edit

The command below starts the editor with the crontab file of the user.

crontab -e

5.8 - Test

You can test the scheduled script with the following command:

env -i  yourScript

The env -i will forget the environment variables as the cron do. See the environment variable section below.

5.9 - History: See log

5.9.1 - Job Log (Cron Logs)

  • When executing commands, any output is mailed to the owner of the crontab (or to the user specified in the MAILTO environment variable in the crontab, if such exists).
  • Any job output can also be sent to syslog by using the -s option.

On a systemd-based system, you can use the journalctl utility to see system logs, including logs from the cron daemon.

To see logs from e.g. the last hour, and only from the cron daemon:

journalctl --since "1 hour ago" -t CRON

5.9.2 - Command History

cat /var/log/cron
# or
sudo cat /var/log/cron

Example: output with:

  • a LIST: crontab -l
  • a CMD: a crond job listed in the crontab that starts /root/certbot/renewal.sh
  • a EDIT: crontab -e
Sep  8 09:12:45 server01 crontab[22032]: (root) LIST (root)
Sep  8 09:13:01 server01 CROND[22035]: (root) CMD (/root/certbot/renewal.sh)
Sep  8 09:14:01 server01 CROND[22312]: (root) CMD (/root/certbot/renewal.sh)
Sep  8 09:15:01 server01 CROND[22589]: (root) CMD (/root/certbot/renewal.sh)
Sep  8 09:16:01 server01 CROND[22782]: (root) CMD (/root/certbot/renewal.sh)
Sep  8 09:17:01 server01 CROND[22970]: (root) CMD (/root/certbot/renewal.sh)
Sep  8 09:17:05 server01 crontab[22967]: (root) BEGIN EDIT (root)
Sep  8 09:17:08 server01 crontab[22967]: (root) REPLACE (root)
Sep  8 09:17:08 server01 crontab[22967]: (root) END EDIT (root)
Sep  8 09:18:02 server01 crond[519]: (root) RELOAD (/var/spool/cron/root)

6 - Configuration

6.1 - Environment Variable

Several environment variables are set up automatically by the cron(8) daemon:

  • SHELL is set to /bin/sh,
  • LOGNAME and HOME are set from the /etc/passwd line of the crontab´s owner.

HOME and SHELL may be overridden by settings in the crontab; LOGNAME may not.

7 - Metadata

Each user can have their own crontab. They are files in /var/spool/cron that are not intended to be edited directly.

8 - Documentation / Reference


Data Science
Data Analysis
Statistics
Data Science
Linear Algebra Mathematics
Trigonometry

Powered by ComboStrap