Introduction
Ansible, the powerful IT automation tool, provides a convenient way to manage cron jobs within your infrastructure. In this tutorial, we will explore the Ansible cron module, guiding you through the process of defining, scheduling, and advanced management of your recurring tasks.
Introduction to Ansible Cron
Ansible is a powerful infrastructure automation tool that simplifies the management of complex IT environments. One of the key features of Ansible is its ability to manage cron jobs, which are scheduled tasks that run at specific intervals. The Ansible cron module provides a straightforward way to create, modify, and delete cron jobs on remote hosts.
What is Cron?
Cron is a time-based job scheduler in Unix-like operating systems. It allows users to schedule commands or scripts to run at specific intervals, such as every minute, hour, day, or month. Cron jobs are commonly used for tasks like system maintenance, data backups, and automated reporting.
Benefits of Using Ansible for Cron Job Management
Ansible simplifies the management of cron jobs in several ways:
- Centralized Management: With Ansible, you can define and manage cron jobs across multiple hosts from a single control node, making it easier to maintain consistency and track changes.
- Idempotency: Ansible's idempotent nature ensures that cron job configurations are applied consistently, regardless of the current state of the remote host.
- Version Control: By storing your Ansible playbooks in a version control system, you can easily track and manage changes to your cron job configurations over time.
- Scalability: Ansible's agentless architecture allows you to manage cron jobs on a large number of hosts without the need for additional infrastructure.
Prerequisites
To use the Ansible cron module, you'll need the following:
- Ansible installed on your control node
- Access to the remote hosts you want to manage
- Familiarity with basic Ansible concepts, such as playbooks and modules
Defining Cron Jobs with Ansible
The Ansible cron module provides a simple and effective way to manage cron jobs on remote hosts. Here's how you can use it to define cron jobs in your Ansible playbooks.
Using the cron Module
The cron module in Ansible allows you to create, modify, and delete cron jobs. Here's an example of how to define a cron job that runs a script every minute:
- hosts: all
tasks:
- name: Ensure a cron job is present
cron:
name: Run backup script
minute: "*/1"
job: /opt/scripts/backup.sh
In this example, the cron module is used to create a cron job with the following parameters:
name: A descriptive name for the cron jobminute: The minute(s) when the job should run (every minute in this case)job: The command or script to be executed
Cron Job Parameters
The cron module supports a variety of parameters to customize your cron jobs, including:
| Parameter | Description |
|---|---|
name |
A descriptive name for the cron job |
minute, hour, day, month, weekday |
The time when the job should run |
job |
The command or script to be executed |
user |
The user account under which the job should run |
state |
Ensures the job is present or absent |
cron_file |
The name of the cron file in the /etc/cron.d directory |
special_time |
Predefined scheduling options, such as reboot, yearly, monthly, etc. |
Handling Cron Job Output
By default, cron jobs send their output to the system mail, which can be inconvenient. To handle the output, you can redirect it to a log file or send it to a specific email address:
- hosts: all
tasks:
- name: Ensure a cron job is present
cron:
name: Run backup script
minute: "*/1"
job: /opt/scripts/backup.sh > /var/log/backup.log 2>&1
In this example, the output of the backup script is redirected to the /var/log/backup.log file.
Advanced Cron Job Management
While the basic usage of the Ansible cron module is straightforward, there are several advanced techniques and features that can help you manage cron jobs more effectively.
Conditional Cron Job Execution
Sometimes, you may want to run a cron job only when certain conditions are met. You can achieve this by using Ansible's conditional statements, such as when clauses:
- hosts: all
tasks:
- name: Run backup script if disk usage is above 80%
cron:
name: Run backup script
minute: "*/1"
job: /opt/scripts/backup.sh
when: ansible_facts['ansible_devices']['sda']['percent_used'] > 80
In this example, the cron job will only be created if the disk usage on the sda device is above 80%.
Cron Job Templates
If you have multiple cron jobs that share similar configurations, you can use Jinja2 templates to make your Ansible playbooks more maintainable. Here's an example:
- hosts: all
tasks:
- name: Create cron job from template
cron:
name: "{{ item.name }}"
minute: "{{ item.minute }}"
job: "{{ item.job }}"
loop:
- {
name: "Run backup script",
minute: "*/1",
job: "/opt/scripts/backup.sh"
}
- {
name: "Generate reports",
minute: "0 3",
job: "/opt/scripts/generate_reports.sh"
}
loop_control:
loop_var: outer_item
In this example, the cron job configurations are defined as a list of dictionaries, which are then looped over and applied to the remote hosts.
Cron Job Validation
To ensure that your cron jobs are configured correctly, you can use the cron_job lookup plugin to validate the existing cron jobs on the remote hosts:
- hosts: all
tasks:
- name: Validate cron jobs
assert:
that:
- "'Run backup script' in cron_job"
- "'Generate reports' in cron_job"
vars:
cron_job: "{{ lookup('cron_job') }}"
This task uses the cron_job lookup plugin to retrieve the list of cron jobs on the remote hosts, and then asserts that the expected cron jobs are present.
By incorporating these advanced techniques, you can create more robust and flexible cron job management solutions with Ansible.
Summary
By the end of this tutorial, you will have a solid understanding of how to leverage the Ansible cron module to streamline the management of your cron jobs. You will be able to define, schedule, and monitor your recurring tasks, ensuring a more efficient and reliable infrastructure powered by Ansible.


