48

How are files under /etc/cron.d used?

From https://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

cron reads the files in /etc/cron.d/ directory. Usually system daemon such as sa-update or sysstat places their cronjob here. As a root user or superuser you can use following directories to configure cron jobs. You can directly drop your scripts here. The run-parts command run scripts or programs in a directory via /etc/crontab file:

/etc/cron.d/ Put all scripts here and call them from /etc/crontab file.

On Lubuntu 18.04, the files under /etc/cron.d seem to be crontab files not shell scripts (which was mentioned in the above link):

$ cat /etc/cron.d/anacron 
# /etc/cron.d/anacron: crontab entries for the anacron package

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

30 7    * * *   root    [ -x /etc/init.d/anacron ] && if [ ! -d /run/systemd/system ]; then /usr/sbin/invoke-rc.d anacron start >/dev/null; fi

My /etc/crontab file never refers to files under/etc/cron.d, contrary to what the link says:

$ cat /etc/crontab 
# /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 )

Could you explain how the files under /etc/cron.d are used? Thanks.

1 Answer 1

48

In Debian derivatives, including Lubuntu, the files in /etc/cron.d are effectively /etc/crontab snippets, with the same format. Quoting the cron manpage:

Additionally, in Debian, cron reads the files in the /etc/cron.d directory. cron treats the files in /etc/cron.d as in the same way as the /etc/crontab file (they follow the special format of that file, i.e. they include the user field). However, they are independent of /etc/crontab: they do not, for example, inherit environment variable settings from it. This change is specific to Debian see the note under DEBIAN SPECIFIC below.

Like /etc/crontab, the files in the /etc/cron.d directory are monitored for changes. In general, the system administrator should not use /etc/cron.d/, but use the standard system crontab /etc/crontab.

The Debian-specific section hints at the reason system administrators shouldn’t use /etc/cron.d:

Support for /etc/cron.d (drop-in dir for package crontabs)

It’s designed to allow packages to install crontab snippets without having to modify /etc/crontab.

17
  • 1
    Thanks. Are the files in /etc/cron.d and /etc/crontab independent of each other, and read by crond independently and separately? Or does /etc/crontab ever include the files in /etc/cron.d?
    – Tim
    Jul 26, 2018 at 23:53
  • 1
    “However, they are independent of /etc/crontab”, as quoted above. To be absolutely clear, /etc/crontab doesn’t include files from /etc/cron.d by default. (As an administrator, you could place commands in /etc/cron.d and use them in /etc/crontab, but that would be thoroughly confusing.) Jul 26, 2018 at 23:59
  • 3
    Please don’t edit comments so radically when they ask questions :-(. Nov 1, 2018 at 15:03
  • 36
    People might miss, that "the file names must conform to the filename requirements of run-parts" (see Debian's man cron). So filenames in /etc/cron.d/ which match the shell glob *[!A-Za-z0-9_-]* are ignored! Hence things like *.dpkg-dist or vi-backups *~ do no harm, but if you accidentally create /etc/cron.d/very_important.crontab, this will get ignored due to the . in it!
    – Tino
    Jan 16, 2019 at 19:06
  • 22
    Another thing to take note of is files in /etc/cron.d MUST include the user field or they simply will not run - with nothing being logged to indicate what the problem is. Oct 28, 2019 at 22:00

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .