How To Use Anacron In Linux

March 17, 2023

Anacron in Linux, like cron, enables you to set periodic tasks on your computer. In this article, I will talk about what is anacronjob, the difference between anacron and cron, and how to create an anacron job.

Difference between anacron and cronjob

Anacron is a little different from cron. Unlike cron, it does not assume that your system is running continuously. And that is useful in the following cases:

  1. Your laptop/desktop computer shuts down/hibernates/sleeps while a job's execution was underway.

  2. The computer is off while a job was supposed to get executed.

The next time, the computer starts the cronjob is executed. For example, Let's say you have scheduled your computer backup every 7th day. Each day when your computer starts, anacron checks if the backup command has been executed once in the last 7 days. If it is not, it will execute the command on that day.

Installation of anacron in Linux

Most of the time, it is installed with cron. So, check your computer if anacron is installed. You can use which or locate command for this.

$ which anacron                                                               
/usr/bin/anacron

$ locate anacron
/etc/anacrontab
/etc/cron.hourly/0anacron
/usr/bin/anacron
/usr/share/man/man5/anacrontab.5.gz
/usr/share/man/man8/anacron.8.gz

How to create an anacron job in linux

To create an anacron job, you need to use a file /etc/anacrontab.

Do not delete any line from it. Just add your job in the end. It might look like the following in your computer:

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
RANDOM_DELAY=45
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
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
1  0  pacman_database  pacman -Sy
3  0  backup /home/ajay/.my_scripts/rsync.sh -b
7  0  anki_sync  /home/ajay/.my_scripts/anki_sync.sh

Here,

  1. SHELL, PATH, and MAILTO define the shell, the path for your scripts, and email. Anacron uses the mail to send the output in case something goes wrong. Don't worry if you have not set up email on your computer. Just leave the MAILTO line as it is. Anacron will only throw the error Can't find sendmail at /usr/sbin/sendmail, not mailing output in its logs and everything else will work.

  2. START_HOURS_RANGE defines the hours in which your jobs will be started. Here, it is 3 AM to 10 PM. If your computer is shut down/sleeps during these hours, your jobs will not be executed. You can even put in a more rigorous time 0-24 in case, your computer is turned off or in suspension mode very often.

  3. RANDOM_DELAY: Anacron adds this (for the above example, anything in between 0 and 45) to the delay in minutes you define for each job. Both units are in minutes. Anacron waits for the total delay before the job is executed.

Explanation of columns in /etc/anacrontab

The first column defines periods in days. 1 means every 1st day. 3 means every 3rd day and so on. It can also be @monthly, @daily, @weekly for monthly, daily, and weekly execution of jobs.

The second column defines the delay in minutes. Anacron adds this to RANDOM_DELAY and waits for the total delay before the job is executed.

The third column is the job identifier. It is just a name so it can be anything. Anacron uses it in logs such as journlctl. Use it to see if your anacron is executing your jobs or not. For example, to check if anacron is executing the rsync backup or not, run the command journalctl --unit=cronie.service (other linux distros might use a different word instead of cronie) and search for your job identifier backup in the output (use / or ? or grep):

$ journalctl --unit=cronie.service | grep backup

Mar 02 12:01:01 legion anacron[34119]: Will run job `backup' in 19 min.
Mar 02 12:20:24 legion anacron[34119]: Job `backup' started.
Mar 02 12:21:20 legion anacron[34119]: Job `backup' terminated.
Mar 05 19:01:01 legion anacron[148378]: Will run job `backup' in 4 min.
Mar 05 19:05:17 legion anacron[148378]: Job `backup' started.
Mar 05 19:05:30 legion anacron[148378]: Job `backup' terminated.
Mar 08 00:01:01 legion anacron[263525]: Will run job `backup' in 29 min.
Mar 08 00:31:14 legion anacron[263525]: Job `backup' started
...

The fourth column is a command. Write the full path in case it is not included in the PATH variable defined in /etc/anacrontab.

Conclusion

That's all. For more, see anacron's manuals - man 8 anacron and man 5 anacrontab. If you have any recommendations/questions, tell them in the comment section below. Thanks.