Cron versus anacron - understanding the differences

Cron versus anacron - understanding the differences

May 22, 2022
Madhura Kumar

As developers, we're often required to perform repetitive operations to ensure our systems are working as expected. These tasks include taking database backups, deleting temporary files, and performing other system maintenance tasks.

Two of the most common options for automating these processes on a Linux-based computer system are cron and anacon. In this article we'll introduce cron and anacron, explore their similarities and differences, and walk through how to implement each. We'll also discuss some of their limitations and a simpler solution for scheduling internal operations: Airplane.

Cron

In most Linux systems, the cron daemon handles the majority of system backups, software upgrades, and other scheduled operations. It's great for executing scheduled activities on systems that operate 24 hours a day, seven days a week — such as servers.

The cron daemon works in the background. Every minute, it wakes up and checks to see whether someone has scheduled a job for that minute. If this is the case, it executes the job. Otherwise, it remains idle. The cron runs shell scripts or basic bash commands saved in a file.

Anacron

Anacron is a service that runs commands regularly with a frequency set in days. One of the biggest differences between cron and anacron is that anacron considers that the computer is not always on. Anacron works well when running daily, weekly, and monthly scheduled jobs on machines that will not run 24-7, such as laptops or desktops.

For example, say we have a job that takes a backup and it's scheduled to run daily at 5AM when we're asleep. It's pretty likely that our laptop will be off at that time. If your backup script is run by cron, it won't be executed when your laptop is off. If we use anacron, the next time we power on our laptop, we'll see that the script has been executed.

Cron versus anacron

Cron

  • Cron is a daemon that executes scheduled tasks on a system that is always running.
  • Cron does not execute a scheduled job if the system is not running.
  • With cron, you can schedule tasks to run every minute.

Anacron

  • Anacron is not a daemon and relies on other methods in Linux to execute scheduled tasks.
  • Anacron is for systems that are usually turned off when not in use, such as personal computers.
  • Anacron can only be run daily, monthly, or weekly (cannot be run by the minute).
  • The main configuration file, /etc/anacrontab, contains a list of scheduled jobs. Anacron examines each job to see whether it was completed within the specified time frame. If not, the job runs and the timestamps are saved in the /var/spool/anacron file. As cron does not perform these actions, this might be a deciding factor for organizations deciding between cron or anacron.

Cron and anacron are both used for automating scheduled processes on a Linux-based computer system.

Implementing cron

Cron lets us run jobs at scheduled times, dates, and intervals. The first step in implementing cron is to use the root user in the terminal to edit the etc/crontab configuration file for system-wide jobs:

sudo -i

Next, we execute the crontab -e command in the same terminal to alter the crontab file.

If we are editing the crontab file for the first time, it asks us to use a text editor to open the crontab file. As shown in the screen capture, we can select 1 for nano, 2 for vim.tiny, 3 for emacs, and 4 for ed.

Selecting a text editor opens the crontab file.

In the next step, we create a cron job on the last line in the crontab file to execute the abc.sh file every minute.

* * * * * /bin/sh /home/username/Desktop/abc.sh

The syntax to add the cron job is * * * * * options. Here, options can either be a standalone command or a script file. Also, the first asterisk (*) means minutes (0 to 59), the second means hours (0 to 23), the third means the day of the month (1 to 31), the fourth means months (1 to 12), and the fifth means the day of the week (0 to 7).

After typing the command, press Ctrl + X, then type Y and press Enter to save the crontab file. Then a message displays similar to "installing new crontab."

Next, we create a shell script called abc.sh that runs every minute as specified in the crontab file.

cd /home/user/Destkop

nano abc.sh

Inside that file, we write a command that prints the current date and time in UTC format to a text file called logfile in the Desktop folder:

echo "'date -u'" >> /home/username/Desktop/log file

We can list cron jobs using the command crontab -l.

As a result of our cron job, a file named logfile containing the current date and time prints every minute.

It's worth noting that removing a job from the crontab stops execution. If the server is not running, the cron job does not execute, and we might miss a critical task. That’s where anacron comes into the picture.

You can find more information on Cron troubleshooting and Top reasons your cron isn't running on the Airplane blog.

Implementing anacron

To start let's recall that anacron and cron don't run at the same granularity. Anacron can only be run daily, weekly, or monthly, while cron can be set to run every minute.

The first step in implementing anacron is to use a root user to edit the /etc/anacrontab configuration file.

sudo -i

Next, we execute this command to open the anacron config file:

nano /etc/anacrontab

A typical anacrontab file looks like this:

To execute a sample.sh script daily after the system starts using anacron, we add this command:

1 0 anacron.testjob /bin/bash /home/sample.sh

Here, the first argument in the command, 1, means it is a daily job. For weekly jobs, we specify 7 and 30 for monthly.

The second argument, 0, is system wait. The third argument is the job name, which can be set to anything. Lastly, the fourth argument can either be a command or shell script file to execute.

After defining the job, we create the shell script file inside the home directory.

cd /home

Then, we execute the following command to create a sample.sh file:

nano sample.sh

Inside the file, we paste the following command, which prints the message every day as defined when we created the job.

echo "This is an anacron job">> /home/Hello.txt

As a result, we have created hello.txt.

Similar to cron, removing the job from the anacrontab will stop execution.

The pain points of using cron and anacron

There are many pain points when using either cron or anacron to carry out timed jobs. A few notable ones include:

  • Lack of graphical user interface (GUI) — Without a GUI, there is no easy way to determine whether jobs are running. The only way to watch cron jobs is via log files and emails. This can directly impact usability and maintainability if we have a large application with many jobs.
  • No fault tolerance — Cron and anacron do not have any built-in functionality to respond to failures. When a cron or anacron job fails, we'll need to re-run the scheduled task manually, which causes interruptions and can be time-consuming and frustrating depending on the number of jobs.
  • Performance issues Sometimes, a poorly configured cron job can use more memory, impacting the performance of the server or basic system operations. This memory leak could also result in server freeze, and thus downtime. Cron and anacron may fail for other reasons, such as overlapping jobs. Because of this, you'll likely need to build out monitoring logic to ensure cron and anacron jobs are working properly, which may require more human resources.

Airplane schedules

Airplane schedules are a serverless alternative that can help eliminate many of the pain points experienced while using cron or anacron to carry out scheduled operations. Using Airplane, you can manage, edit, and create schedules centrally. Airplane also supports audit logs, permissions, and features a direct integration with Slack or email to send notifications if jobs fail. You can sign up for a free account to try out Airplane today.

Share this article:

Subscribe to new blog posts from Airplane:

Leveraging feature flags to boost productivity

Leveraging feature flags to boost productivity

Jun 23, 2022
Madhura Kumar
In this article we'll discuss six ways to leverage feature flags to boost productivity and walk through how to build a lightweight feature flag in under 5 minutes. What
Django admin crash course - how to build a basic admin panel

Django admin crash course - how to build a basic admin panel

Jun 9, 2022
Madhura Kumar
In this article, we’ll first explore how to create a Django admin panel with basic functionality. Then, we’ll demonstrate some intermediate and advanced concepts — including how to customize your admin panels to manage product inventory and generate reports.
go to home