I recently added in a new script to the directory /etc/cron.daily so it would be run once a day along with the other scripts in there but for some reason it wasn’t being run. After much messing about I discovered it was the because the name of the script had a . in it.
Specifically the script was called get_xferlog.sh as is common with shell scripts. I changed this to be just get_xferlog and that is now working ok.
The files in /etc/cron.daily are executed as part of an entry in /etc/crontab:-
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts -v /etc/cron.daily )
So it uses the default settings of run-parts to execute all scripts in the directory /etc/cron.daily and the man page for run-parts says.
If neither the –lsbsysinit option nor the –regex option is given then the names must consist entirely of upper and lower case letters, digits, underscores, and hyphens.
If you want to check what run parts will do you can use the –test flag which just lists the scripts that will be executed without actually executing them. Thus
run-parts -v –test /etc/cron.daily
This proved very handy in debugging the issue I was having without having to wait a day between tests for the cron job to run.
I should add that the above applies to Ubuntu based servers, Red Hat servers using run-parts don’t seem to care about a dot in the filename