Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Crontab isn't running

Tags:

linux

cron

My crontab isn't running and I'm trying to figure out why. I've created a symbolic link within /etc/cron.d to /var/www/mysite.crontab

user@ip-xxxxxxxxxx:/etc/cron.d$ ll
total 20
drwxr-xr-x  2 root root 4096 Apr 11 03:48 ./
drwxr-xr-x 96 root root 4096 Apr 16 00:50 ../
lrwxrwxrwx  1 root root   30 Apr 11 03:47 mysite.crontab -> /var/www/mysite.crontab
-rw-r--r--  1 root root  124 Feb 27  2012 drupal7
-rw-r--r--  1 root root  544 Sep 12  2012 php5
-rw-r--r--  1 root root  102 Apr  2  2012 .placeholder

The actual cron file is...

#Purge old deals
4 1 * * * www-data wget -q -O- http://www.mysite.com/cron/clean > /dev/null 2>&1;
like image 878
Webnet Avatar asked Nov 29 '25 12:11

Webnet


1 Answers

Oddly enough the problem is with the name of the file. You are not permitted to use a . as a part of the name of the file when present in the /etc/cron.d dirctory.

The logic for this is in the database.c file, in the function valid_name. Renaming the file to something like mysite_crontab should fix the issue.

In general, the filename should probably just be a simple name mysite the fact that it's in this directory implies that it's a cron file already.

The file that is being pointed to must be owned by root, this is stated in the man page for the support of the /etc/cron.d directory:

Support for /etc/cron.d is included in the cron daemon itself, which handles this location as the system-wide crontab spool. This directory can contain any file defining tasks following the format used in /etc/crontab, i.e. unlike the user cron spool, these files must provide the username to run the task as in the task definition.

Files in this directory have to be owned by root, do not need to be executable (they are configuration files, just like /etc/crontab) and must conform to the same naming convention as used by run-parts(8): they must consist solely of upper- and lower-case letters, digits, underscores, and hyphens. This means that they cannot contain any dots. If the -l option is specified to cron (this option can be setup through /etc/default/cron, see below), then they must conform to the LSB namespace specification, exactly as in the --lsbsysinit option in run-parts.

The intended purpose of this feature is to allow packages that require finer control of their scheduling than the /etc/cron.{hourly,daily,weekly,monthly} directories to add a crontab file to /etc/cron.d. Such files should be named after the package that supplies them.

like image 139
Petesh Avatar answered Dec 01 '25 03:12

Petesh



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!