For Linux to automatically perform tasks that you would otherwise have to perform yourself, such as running scripts and executing specific commands, we use a tool called cron. On Linux systems, the cron utility is the preferred way to automate the running of scripts at specific time intervals.
With most Crons (e.g. Vixie-Cron - Debian/Ubuntu default, Cronie - Fedora default, Solaris Cron ...) you get the list of scheduled cron jobs for the current user via:
$ crontab -l
or for another user via
# crontab -u username -l
Alternatively, you can look up the spool files. Usually, they are saved under /var/spool/cron, e.g. for vcron, the following directory /var/spool/cron/crontabs contains all of the configured crontabs of all users - except the root user who is also able to configure jobs via the system-wide crontab, which is located at:
/etc/crontab
To view it run the following less command:
less /etc/crontab
Example structure of the 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
On my computer it looks like this:
# /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
With cronie (default on Fedora/CentOS), there is a cron.d style config directory for system cron jobs, as well:
/etc/cron.d
As always, the cron.d directory simplifies maintaining configuration entries that are part of different packages.
For convenience, most distributions also provide a directories where linked/stored scripts are periodically executed, e.g.:
/etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly
How to List Hourly Cron Jobs
To list hourly cron jobs, run below command
$ ls -la /etc/cron.hourly/ total 12 drwxr-xr-x 2 root root 4096 Apr 24 20:44 . drwxr-xr-x 96 root root 4096 May 19 17:12 .. -rw-r--r-- 1 root root 102 Feb 9 2013 .placeholder
How to List Daily Cron Jobs
We can list the daily cron jobs with the following command:
$ ls -la /etc/cron.daily/ total 72 drwxr-xr-x 2 root root 4096 Apr 24 20:46 . drwxr-xr-x 96 root root 4096 May 19 17:12 .. -rw-r--r-- 1 root root 102 Feb 9 2013 .placeholder -rwxr-xr-x 1 root root 376 Apr 4 2014 apport -rwxr-xr-x 1 root root 15481 Apr 10 2014 apt -rwxr-xr-x 1 root root 314 Feb 18 2014 aptitude -rwxr-xr-x 1 root root 355 Jun 4 2013 bsdmainutils -rwxr-xr-x 1 root root 256 Mar 7 2014 dpkg -rwxr-xr-x 1 root root 372 Jan 22 2014 logrotate -rwxr-xr-x 1 root root 1261 Sep 23 2014 man-db -rwxr-xr-x 1 root root 435 Jun 20 2013 mlocate -rwxr-xr-x 1 root root 249 Feb 17 2014 passwd -rwxr-xr-x 1 root root 2417 May 13 2013 popularity-contest -rwxr-xr-x 1 root root 214 Mar 27 2017 update-notifier-common -rwxr-xr-x 1 root root 328 Jul 18 2014 upstart
How to List Weekly Cron Jobs
To list weekly cron jobs. Run below command
$ ls -la /etc/cron.weekly/ total 28 drwxr-xr-x 2 root root 4096 Apr 24 20:46 . drwxr-xr-x 96 root root 4096 May 19 17:12 .. -rw-r--r-- 1 root root 102 Feb 9 2013 .placeholder -rwxr-xr-x 1 root root 730 Feb 23 2014 apt-xapian-index -rwxr-xr-x 1 root root 427 Apr 16 2014 fstrim -rwxr-xr-x 1 root root 771 Sep 23 2014 man-db -rwxr-xr-x 1 root root 211 Mar 27 2017 update-notifier-common
How to List Monthly Cron Jobs
This will list monthly cron jobs
$ ls -la /etc/cron.monthly/ total 12 drwxr-xr-x 2 root root 4096 Apr 24 20:44 . drwxr-xr-x 96 root root 4096 May 19 17:12 .. -rw-r--r-- 1 root root 102 Feb 9 2013 .placeholder
View Software Specific Cronjobs
We can take a look at a specific cron job with cat command:
$ cd /etc/cron.daily/ $ ls -l total 60 -rwxr-xr-x 1 root root 376 Apr 4 2014 apport -rwxr-xr-x 1 root root 15481 Apr 10 2014 apt -rwxr-xr-x 1 root root 314 Feb 18 2014 aptitude -rwxr-xr-x 1 root root 355 Jun 4 2013 bsdmainutils -rwxr-xr-x 1 root root 256 Mar 7 2014 dpkg -rwxr-xr-x 1 root root 372 Jan 22 2014 logrotate -rwxr-xr-x 1 root root 1261 Sep 23 2014 man-db -rwxr-xr-x 1 root root 435 Jun 20 2013 mlocate -rwxr-xr-x 1 root root 249 Feb 17 2014 passwd -rwxr-xr-x 1 root root 2417 May 13 2013 popularity-contest -rwxr-xr-x 1 root root 214 Mar 27 2017 update-notifier-common -rwxr-xr-x 1 root root 328 Jul 18 2014 upstart $ cat update-notifier-common #!/bin/sh set -e [ -x /usr/lib/update-notifier/package-data-downloader ] || exit 0 # Try to rerun any package data downloads that failed at package install time. /usr/lib/update-notifier/package-data-downloader
On top of that, you can have "at" jobs (/var/spool/at/*), anacron (/etc/anacrontab and /var/spool/anacron/*)
The correct and timely execution of those scripts is managed via run-parts entries in the system crontab or via anacron.
With systemd (on Fedora, CentOS 7, etc) periodic job execution can additionally be configured via timer units. The enabled system timers can be displayed via:
$ systemctl list-timers