The cron daemon
crond provides a means for users to schedule the execution of various commands.
crond determines what commands to execute, and when to execute them through the contents of
crontab. This file can be edited in any text editor and is usually found at
/etc/crontab. For help on scheduling commands through
crontab, please read http://en.wikipedia.org/wiki/Cron.
NOTE: In fact there are TWO crons running on NSLU2.
The first one,
crond, is the default one and comes with Linksys firmware. It reads ONLY the
The second one, real
cron, is part of cron package (
cron_4.1-7_armeb.ipk at time of writting) and it HAS TO be installed in order for some other packages to work.
cron is started at boot time (thanks to
/opt/etc/init.d/S10cron) in addition to the first one. The real
cron reads main
/opt/etc/crontab and additional crontabs placed in
One of ipkg packages that rely on real
Having written a line in
crontab for a scheduled task, a common problem involves the user not seeing the execution of their command, even though the command executes perfectly when typed at the command line.
First of all, ensure that
crond has actually attempted to run the command at the correct time. Check
/var/log/messages to see if
crond has performed the command. If it has not done so, you may have set the command to run at the wrong date or time.
If you are seeing an entry in
/var/log/messages, but not the results of the command, ensure that the environment variables set at the top of the
crontab file match those in your system environment. An example
crontab is shown below. Note the entries for
# ---------- ---------- Default is Empty ---------- ---------- #
0 0-23/8 * * * root /usr/sbin/CheckDiskFull &>/dev/null
0 0 * * * root /usr/sbin/WatchDog &>/dev/null
1 * * * * root /usr/sbin/hwclock -s &>/dev/null
You can check your environment variables by typing
env. Remove or add environment variables as necessary until the environment settings match those in
crontab. Since I was logged in via
ssh, I did not remove any variables associated with
sshd itself, such as
export VAR=value allows you to set or change environment variables. To remove a variable, simply set it to an empty string. I.e.,
WARNING: Prior to editing any environment variables, make a note of any important environment settings before changing them! Most environment variables will be reset once a user logs off and logs on, through entries in
/etc/profile and so on. If you are unsure as to whether some settings will be restored, write them down at the very least.
Once your environment variables match those of
crontab, run your command from the shell and observe any error messages. The most common cause of problems is a missing path. Add variables to your environment one by one until the command executes from the command line. Now you will know what variables to set in
TIP: rsync in a cron job didn't work for me if redirected to /dev/null. By removing the redirection, it worked fine.
TIP: if you see a line like:
May 17 9:00:00 (none) cron.info /USR/SBIN/CRON: (root) CMD (root^I/usr/local/bin/backup)
then try removing the username from your crontab, even though cron tells you to put it there.
TIP: For OpenSlug 3.1 the sh jobs in within crontab did only work, when I did not enter the user name "root" in the command lines:
10 20 * * * /opt/www/data/outlook.sh (works)
10 20 * * * root /opt/www/data/outlook.sh (did not work ...)
Note that the Linksys supplied version of crond (the one you get if you don't install the cron ipkg) is not a full featured cron. It appears to come from Lineo or SnapGear but I can't locate source code other than a few fragments that are only in Google's cache. Features known not to work are specifying a non root user (it runs the command as root regardless) and mail notifications (it relies on /bin/mail which doesn't exist).