
Never Miss a Scheduled Task Again: A Deep Dive into Anacron on Linux
For Linux administrators and power users, task automation is a cornerstone of an efficient system. The cron daemon is the classic tool for this job, reliably executing scripts at precise times. But what happens when the system isn’t running 24/7? If your desktop, laptop, or even a server is powered down when a cron job is scheduled, that task is simply missed. This is where Anacron comes in, ensuring your critical jobs always run, regardless of system uptime.
Anacron is a powerful task scheduler designed specifically for systems that are not always on. It complements cron by ensuring that daily, weekly, and monthly jobs are executed even if their scheduled time has passed.
Cron vs. Anacron: Understanding the Key Difference
The fundamental distinction between cron and anacron lies in their design philosophy.
- Cron assumes a system is always running. It operates as a daemon, waking up every minute to check if a job needs to be executed at that exact time. If the system is off at 2:00 AM when a backup script is scheduled,
cronwill not run it later. - Anacron assumes a system may be off. It is not a daemon. Instead, it is typically triggered once when the system boots up or by another
cronjob. It checks if a task’s specified frequency (e.g., daily) has passed since its last execution. If it has, Anacron runs the job.
In short, cron is time-based, while Anacron is frequency-based. This makes Anacron the perfect tool for ensuring that maintenance scripts, backups, and system updates are never skipped on personal machines or servers with periodic reboots.
How Anacron Works Under the Hood
Anacron’s logic is elegantly simple and relies on just two key components: a configuration file and timestamp files.
The Configuration File:
/etc/anacrontab
This file defines the jobs Anacron manages. Unlike a user’s crontab, there is typically only one system-wideanacrontab. A typical entry looks like this:period-in-days delay-in-minutes job-identifier commandperiod-in-days: The frequency of the job (e.g.,1for daily,7for weekly,@monthlyfor monthly).delay-in-minutes: A waiting period after Anacron starts before this job is executed. This prevents a sudden load spike on system startup.job-identifier: A unique, descriptive name for the job. This name is used for the timestamp file.command: The actual script or command to be executed.
A standard
/etc/anacrontaboften looks like this:# /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # The maximal random delay added to the base delay of a job. RANDOM_DELAY=45 # These jobs are started during startup. # period delay 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.monthlyTimestamp Files:
/var/spool/anacron/
For eachjob-identifierdefined inanacrontab, Anacron maintains a timestamp file in this directory (e.g.,/var/spool/anacron/cron.daily). This file contains just one thing: the date the job was last executed.When Anacron runs, it reads the date from the timestamp file, compares it to the current date, and if the specified period (e.g., 1 day, 7 days) has elapsed, it executes the command and updates the timestamp file with the new date.
Practical Guide: Scheduling Jobs with Anacron
On most modern Linux distributions, Anacron is already integrated with cron. The cron.daily, cron.weekly, and cron.monthly jobs are often managed by Anacron out of the box.
The Easiest Method: Using the cron.* Directories
For the vast majority of use cases, you don’t need to edit /etc/anacrontab directly. The simplest and safest way to schedule a recurring task is to place your script in the appropriate directory:
- /etc/cron.daily/: Scripts here will be run once per day.
- /etc/cron.weekly/: Scripts here will be run once per week.
- /etc/cron.monthly/: Scripts here will be run once per month.
Actionable Tip: To add a new daily backup script, simply save it as my-backup.sh inside /etc/cron.daily/ and make it executable.
sudo mv my-backup.sh /etc/cron.daily/
sudo chmod +x /etc/cron.daily/my-backup.sh
Anacron will automatically pick up and execute this script according to its daily schedule.
Testing Your Anacron Jobs
If you want to test your setup or manually trigger all Anacron jobs, you can force it to run. This is useful for ensuring a script works as expected without waiting for the next day.
Use the -f (force) flag to ignore the timestamps and run all jobs. It’s also helpful to use -n (no delay) to run them immediately.
# Force anacron to run all jobs now, ignoring delays
sudo anacron -f -n
Check your system logs (e.g., using journalctl or looking in /var/log/syslog) to confirm that your scripts were executed.
Security and Best Practices
When automating tasks that run with root privileges, security is paramount. Follow these best practices to keep your system secure.
Use Absolute Paths: Always use full, absolute paths for commands and files within your scripts (e.g., use
/usr/bin/rsyncinstead of justrsync). This prevents potential PATH manipulation attacks where an attacker could place a malicious executable in a directory that is searched first.Set Proper Permissions: Scripts placed in
/etc/cron.daily/and similar directories should not be writable by anyone other than the root user. A permission setting of755(read/write/execute for root, read/execute for others) is a secure standard.sudo chmod 755 /etc/cron.daily/your-script.shManage Script Output: By default, any output (STDOUT or STDERR) from an anacron job will be emailed to the system’s root user. If you don’t want these emails, redirect the output to
/dev/null.# Add this to the end of a command in your script to suppress all output > /dev/null 2>&1
By understanding and leveraging Anacron, you can build a more robust and reliable automation strategy. It ensures that no matter when you turn your machine on, your essential maintenance tasks will always be taken care of, providing peace of mind and a healthier Linux system.
Source: https://kifarunix.com/scheduling-tasks-using-anacron-in-linux-unix/


