Table of Contents
cron is a classic Unix daemon for scheduling commands to be executed at a given frequency. A brief history of cron can be found here.
DD-WRT's cron is based on Paul Vixie's cron implementation. It can be enabled by checking Enable in the Administration tab of the DD-WRT web interface or by issuing the command nvram set cron_enable 1.
Before the cron daemon is started, the
start_cron function is called to
prepare the environment. It creates the
directories if they don't already exist, then creates
/tmp/cron.d to store
cron jobs. On traditional Unix/Linux systems,
cron.d is stored in
rather than modifying paths in the cron source code,
/etc/cron.d is symlinked
/tmp/cron.d on DD-WRT. It is important to note that while the
are persistent across cron processes,
cron.d is deleted and recreated not only
after reboots, but every time cron is started or stopped using
startservice and stopservice. By default, a cron job called
check_ps is added which runs every two minutes and monitors daemon activity.
start_cron will also read the
cron_jobs NVRAM setting which is a
newline separated list of crontab style entries. When start_cron runs, it
reads the lines from
cron_jobs and writes them to
/tmp/cron.d/cron_jobs. As of DD-WRT v24 SP1, start_cron attempts to copy
cron.d style files from
/tmp/cron.d/, but a bug in the code prevents it. cron also will read
/tmp/crontab when it starts, however, unlike
persistent across cron restarts (NOT system restarts), so it is possible to
stop cron, change
/tmp/crontab, and restart cron.
cron reads the contents of
/tmp/crontab once and only once
when cron starts. If you modify the files, delete files, or add files, they
will not be read until cron is restarted and the files exist at load time.
This has an irritating consequence when working with
added or changed in
/tmp/cron.d/ will not take effect when added. When
cron is stopped with stopservice,
/tmp/cron.d/ is removed and when
started again, it will only contain check_ps. With the mycron.d functionality
not working in v24 SP1, the best way to have a persistant crontab that is
restored on boot is to use the
cron_jobs NVRAM setting. The web
interface provides a textbox to add lines of crontab style entries in the
To avoid a potentially massive crontab list stored in NVRAM, the following
shell script can be used to provide equivalent functionality to using
/tmp/mycron.d to store persistent crontabs.
Example 1. /jffs/etc/config/cron.startup
#!/bin/sh stopservice cron mkdir /tmp/cron.d echo "*/2 * * * * root /sbin/check_ps" > /tmp/cron.d/start_ps cp -af /tmp/mycron.d/* /tmp/cron.d/ cp -af /mmc/etc/cron.d/* /tmp/cron.d/ cp -af /jffs/etc/cron.d/* /tmp/cron.d/ cron
This script should also be used in place of startservice cron when starting cron. stopservice cron should still be used to stop cron.