Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

I installed cron with sudo apt-get install cron, started it as root and confirmed that it is running with

ps -ef

I then created a simple script with the following contents:

touch /home/username/cron-test.txt

I made this script file executable and put it into

mv cron-test.sh /etc/cron.hourly

For some reason though, it does not get executed and the file is not being created. I tried running it manually and it works.

I also tried other cron scripts and they do not seem work. Did I miss something or am I using cron incorrectly?

My system is Ubuntu 10.10 and my hoster has stripped it down so it came with only a few processes installed (not even cron).

share|improve this question
    
Can you post the contents of /etc/cron.hourly/cron-test.sh and the output of ls -l /etc/cron.hourly/cron-test.sh –  xofer Sep 29 '11 at 12:20
    
-rwxr-xr-x 1 user user 44 Sep 29 14:13 cron-test.sh –  Frank Vilea Sep 29 '11 at 12:24

2 Answers 2

up vote 7 down vote accepted

Try adding #! /bin/sh as the first line of your script and removing the extension, so that the name is /etc/cron.hourly/cron-test

I remember reading somewhere that cron will not run files with an extension, because it uses runparts when /ect/crontab has the following contents:

# /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 )

The above is the content of my /etc/crontab on Ubuntu 10.04, with cron installed (I have not edited this file)

Since the /etc/crontab file uses run-parts, filename are very restrictive as per (Thanks Matteo):

run-parts runs a number of scripts or programs found in a single directory 
directory. Filenames should consist entirely of upper and lower case letters,
digits, underscores, and hyphens. Subdirectories of directory and files with
other names will be silently ignored. Scripts must follow the
#!/bin/interpretername convention in order to be executed. They will not
automatically be executed by /bin/sh. The files found will be run in the
lexical sort order of the filenames.
share|improve this answer
    
The shebang (#!/bin/sh) is mandatory (making a file executable does not mean that it is executable). Extensions should be no problem. –  Matteo Sep 29 '11 at 13:09
2  
@Matteo: Extensions are not an issue with crontab, but when using the /etc/cron.*/ folders, they can present issues –  Dan McClain Sep 29 '11 at 13:14
1  
@Matteo Exactly, no periods allowed in the filename. –  Shane Madden Sep 29 '11 at 15:47

Here's a quote from the run-parts man page:

Filenames should consist entirely of upper and lower case letters, digits, underscores, and hyphens.

The thing is, you've included a '.' in your filename (just before the 'txt'). That period doesn't match the filename pattern that run-parts uses to find scripts.

Remember that file extensions are NOT part of the filesystem! Any file extensions you put on are simply part of the filename, and so when the rules say 'filename', that includes the period and the extensions.

Further,

Scripts must follow the #!/bin/interpretername convention in order to be executed.

Which means that you MUST put in the #!/bin/bash in order for your script to be executed.

share|improve this answer
    
Thanks for your helpful explanation Michael. –  Frank Vilea Sep 29 '11 at 19:06

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.