How to Install Crontab on CentOS/RHEL Linux?

Published July 04, 2024

Problem: Installing Crontab on CentOS/RHEL

Crontab is a tool for scheduling tasks on Linux systems. Some users may find it hard to install and set up Crontab on CentOS or RHEL distributions. This can stop them from automating routine tasks and managing scheduled jobs on their servers.

Installing Cron and Crontab on CentOS/RHEL

Checking if Cron is Already Installed

To check if Cron is installed on your CentOS/RHEL system, open a terminal and run this command:

rpm -q cronie

This command queries the RPM package manager for the "cronie" package, which provides Cron on CentOS/RHEL systems.

If Cron is installed, you'll see output like:

cronie-1.4.11-23.el7.x86_64

If Cron is not installed, you'll see a message like:

package cronie is not installed

Installing Cron Using YUM Package Manager

If Cron is not installed on your system, you can install it using the YUM package manager. Follow these steps:

  1. Open a terminal on your CentOS/RHEL system.

  2. Run this command to install Cron:

sudo yum install cronie
  1. When asked, type 'y' and press Enter to confirm the installation.

  2. After the installation, start the Cron service:

sudo systemctl start crond
  1. Set Cron to start automatically on system boot:
sudo systemctl enable crond

These commands will install Cron and set it up to run automatically when your system starts. Once installed, you can use Crontab to schedule tasks on your CentOS/RHEL system.

Configuring and Using Crontab on CentOS

Accessing the Crontab Editor

To open and edit the Crontab file, use this command:

crontab -e

This opens the Crontab file for the current user in the text editor. To edit the Crontab for a different user, use:

sudo crontab -u username -e

There are two types of Crontabs:

  1. User-specific Crontabs: Created for individual users and located in /var/spool/cron/.

  2. System-wide Crontabs: Stored in /etc/crontab and /etc/cron.d/ for system-wide tasks.

Understanding Crontab Syntax

Cron expressions follow this format:

* * * * * command_to_execute

The five asterisks represent:

  1. Minute (0-59)
  2. Hour (0-23)
  3. Day of the month (1-31)
  4. Month (1-12)
  5. Day of the week (0-7, where 0 and 7 are Sunday)

You can use numbers, asterisks (*), commas (,), hyphens (-), and forward slashes (/) in these fields to specify when the command should run.

Creating Your First Cron Job

Here's an example of a basic Cron job entry:

30 2 * * * /path/to/backup_script.sh

This Cron job runs a backup script at 2:30 AM every day.

To schedule tasks at specific intervals:

  • Every 15 minutes: /15 * command
  • Every hour: 0 command
  • Every day at midnight: 0 0 * command
  • Every Monday at 9 AM: 0 9 1 command

Use absolute paths for commands and scripts in your Cron jobs to avoid issues with the Cron environment.

Managing Cron Jobs on CentOS

Listing Existing Cron Jobs

To view current Crontab entries, use this command:

crontab -l

This command shows all the Cron jobs for the current user. To view Cron jobs for a specific user, use:

sudo crontab -u username -l

The output displays each Cron job on a separate line. For example:

0 2 * * * /path/to/backup_script.sh
30 * * * * /usr/bin/php /var/www/html/script.php

Each line shows a scheduled task with its timing and command.

Editing and Deleting Cron Jobs

To change existing Cron jobs:

  1. Open the Crontab editor:

    crontab -e
  2. Find the job you want to change.

  3. Edit the timing or command as needed.

  4. Save and exit the editor.

To remove Cron tasks:

  1. Open the Crontab editor as shown above.

  2. Find the line with the job you want to remove.

  3. Delete the entire line.

  4. Save and exit the editor.

To delete all Cron jobs for the current user:

crontab -r

Be careful with this command, as it removes all scheduled tasks for that user.

To remove a specific job without opening the editor, you can use this method:

  1. List and save current jobs:

    crontab -l > mycron
  2. Edit the 'mycron' file to remove the unwanted job.

  3. Load the updated Crontab:

    crontab mycron
  4. Remove the temporary file:

    rm mycron

This process helps you manage your Cron jobs without risking accidental deletions.

Troubleshooting Cron on CentOS/RHEL Linux

Common Crontab Issues and Solutions

Fixing permission problems

Permission problems can stop cron jobs from running. To fix these:

  1. Check file permissions:

    ls -l /path/to/your/script

    Make the script executable:

    chmod +x /path/to/your/script
  2. Check cron job ownership:

    ls -l /var/spool/cron/

    Ensure the crontab file belongs to the right user.

  3. Check if the user can run the command or access needed files.

Solving path and environment variable issues

Cron runs with a limited environment, which can cause path problems:

  1. Use full paths for commands and scripts in your cron jobs.

  2. Set the PATH variable at the start of your crontab or script:

    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  3. Use the user's profile in the cron job:

    * * * * * . $HOME/.profile; /path/to/your/script

Monitoring Cron Job Execution

How to log Cron job output

To capture your cron jobs' output:

  1. Send output to a log file:

    * * * * * /path/to/your/script >> /path/to/logfile.log 2>&1
  2. Use mail to send job output by email:

    MAILTO=your@email.com
    * * * * * /path/to/your/script
  3. Check system logs for cron messages:

    grep CRON /var/log/syslog

Tools for tracking Cron job performance

To monitor cron job performance:

  1. Use time to measure how long jobs take:

    * * * * * /usr/bin/time -o /path/to/timelog.txt /path/to/your/script
  2. Add logging to your scripts to track progress and completion.

  3. Use tools like top or htop to see resource use during job runs.

  4. Use cron monitoring services for more details and alerts.