Why your cron.daily script is not running
By Pete Freitag
Over the years when setting up linux servers I have run into many different reasons that prevent cron.daily or cron.hourly scripts from executing. Today however, I ran into a whole new reason that I had never encountered before.
I ran into this problem on a Ubuntu Linux server. I placed a script in /etc/cron.daily/my_script.sh
but it was not running each day.
I checked all the usual suspects, the reasons I was aware of that cause a cron script to be ignored:
- The script had the execute, or
x
permission. This is probably the most common reason why acron.daily
script will fail to run, you canchmod a+x my_script.sh
to fix this. - The script did not depend on certain environment variables being set (for example if you rely on
$HOME
to be set, you may need to define it yourself). Cron scripts do not have all the same environment variables that you have when you are logged in to a shell, so the script can work when you run it but fail when cron runs it. - The script did not rely on a customized
PATH
to execute commands. ThePATH
that cron gives your script will be minimal, and if you have made customizations to it they may not show up. The best way around this is to use the full path to your commands (use thewhich
command to help figure this out).
But my problem was not any of the above. I found that you can execute the run-parts
command in a test mode to see which scripts it would call in a directory. You can run it like this (it will not execute any of the scripts, it just outputs which ones it would execute):
run-parts --test /etc/cron.daily
My script was not listed in the output!
Well, that was comforting at least, but why my script omitted from the cron.daily
scripts to execute? It turns out you cannot have a file extension on the script, so by renaming the script from my_script.sh
to my_script
it works!
To be a little bit more precise, the issue is that you can't have a .
(dot) in the file name of your cron.daily
or cron.weekly
or cron.hourly
scripts. This issue appears to be specific to certain linux distributions. It occurs on Ubuntu and Debian, but the same script may work fine on RedHat Linux servers.
Why your cron.daily script is not running was first published on January 10, 2018.
If you like reading about cron, linux, unix, or shell then you might also like:
- The 15 Most Useful Linux commands
- Bash Loop To Wait for Server to Start
- Recursively Counting files by Extension on Mac or Linux
- Howto Backup your Mac incrementally over SSH
Weekly Security Advisories Email
Advisory Week is a new weekly email containing security advisories published by major software vendors (Adobe, Apple, Microsoft, etc).
Comments
The run-parts and extension tips did the trick. One thing., my scheduled backup command starts with '$(which duplicity)'
Is there a way that I can verify it will work when cron runs it?
I've got a lot of experience work with RH/CentOS, and only have a couple of servers with Debian. Little differences like this one can drive you nuts (sames script on the other servers works fine with the extension).
The post is spot on !