The main advantage of anacron is that you don’t need to have the system be up and running always to execute the background jobs.
This is very helpful when you want to run background jobs on laptops, which might not be available 24×7. But, you still can schedule routine jobs on these machines using anacron.
This way whenever the laptop starts again, any pending scheduled jobs will be executed by anacron
1. Test Anacron Syntax
All anacron jobs are located under /etc/anacrontab file as shown below:
# cat /etc/anacrontab 1 5 cron.daily nice run-parts /etc/cron.daily 7 25 cron.weekly nice run-parts /etc/cron.weekly @monthly 45 cron.monthly nice run-parts /etc/cron.monthly @bimonthly 45 cron.bimonthly nice run-parts /etc/cron.bimonthly
In the above example, the last line is invalid, as the timeperiod “bimonthly” it not support by anacron.
So, you can check for any syntax error, or other issues with the anacrontab file using the following command.
This output indicates that we have an unknown name period in the file.
# anacron -T anacron: /etc/anacrontab: Unknown named period on line 17, skipping
If you have your own crontab file, you can test that syntax using -T -t and specifying your custom anacrontab file name as shown below.
# anacron -T -t /etc/myanacron anacron: Invalid syntax in /etc/myanacron on line 14 - skipping this line anacron: Invalid syntax in /etc/myanacron on line 15 - skipping this line
2. Custom Spool directory
Apart from specifying your own anacrontab file, you can also specify your own spool directory for anacron. This is helpful when you are testing some anacron jobs, and don’t want to messup the standard anacrontab file and spool directory.
The following uses /root/myspool to store all the timestamp information for the jobs that are defined in the /etc/myanacron file.
# anacron -S /root/myspool -t /etc/myanacron # ls -altr /root/myspool/ total 8 dr-xr-x---. 9 root root 4096 Jan 31 23:35 .. -rw-------. 1 root root 0 Jan 31 23:36 myjob drwxr-xr-x. 2 root root 4096 Jan 31 23:36 .
The default spool directory is /var/spool/anacron as shown below, which stores the timestamp for the jobs from the /etc/anacrontab file.
# ls -l /var/spool/anacron total 16 -rw-------. 1 root root 9 Jan 31 23:56 cron.daily -rw-------. 1 root root 9 Jan 31 23:56 cron.monthly -rw-------. 1 root root 9 Jan 31 23:56 cron.weekly
They typically store the information on when was this particular job last executed:
# cat /var/spool/anacron/cron.daily 20140131 # cat /var/spool/anacron/cron.monthly 20140131
3. Run Anacron in the Foreground
You can also run the anacron in the foreground. Sometime this is easy, as you can see the output on the screen itself. This is good for checking something very quick during testing purpose.
For example, when you don’t give -d option, anacron forks a background jobs, and it will just not display anything on the screen. This example, just updates the timestamp for the jobs, but really doesn’t execute anything. You won’t know what really happened.
# anacron -u
But, when you run the anacron in the foreground, using -d option, you can see what it is doing. Don’t do this when you have jobs that will run for long period of time.
# anacron -d -u Updated timestamp for job `cron.daily' to 2014-01-31 Updated timestamp for job `cron.weekly' to 2014-01-31 Updated timestamp for job `cron.monthly' to 2014-01-31
4. Force the Job Execution
The -f option will do a force execution of the jobs. But this will still consider the delay specs that you’ve set in the anacrontab file.
# anacron -d -f Anacron started on 2014-01-31 Will run job `cron.daily' in 24 min. Will run job `cron.weekly' in 44 min. Will run job `cron.monthly' in 64 min.
However, -n option will execute the job immediately. This will not consider any delay specs that you’ve set in the anacrontab file. Please note that -n option also implies -s option.
# anacron -d -n Anacron started on 2014-01-31 Checking against 0 with 31 Normal exit (0 jobs run)
5. Specify a Job Name
If you have defined multiple jobs in the anacrontab file, you can execute only a specific job by specifying its job name.
In the following example, it will execute only the job with the name “myjob” from the custom /etc/myanacron tab file.
# anacron -f -d -t /etc/myanacron myjob Anacron started on 2014-01-31 Will run job `myjob' in 1 min. Job `myjob' started Job `myjob' terminated Normal exit (1 job run)