OpsInit: Configuring Crontab With Ansible

Reading Time: 3 minutes

cron

Introduction to crontab:

The crontab is a list of commands that you want to run on a regular schedule.

Crontab stands for “cron table”, because it uses the job scheduler cron to execute tasks; cron itself is named after “chronos, ” the Greek word for time.cron is the system process which will automatically perform tasks for you according to a set schedule. The schedule is called the crontab, which is also the name of the program used to edit that schedule.

Linux Crontab Format:

MIN HOUR DOM MON DOW CMD

Crontab Fields and Allowed Ranges (Linux Crontab Syntax)

Field    Description    Allowed Value
MIN      Minute field    0 to 59
HOUR     Hour field      0 to 23
DOM      Day of Month    1-31
MON      Month field     1-12
DOW      Day Of Week     0-6
CMD      Command         Any command to be executed.

How cronjobs are created using crontab?

Crontab is cronjob scheduler which schedules a command to run at a later time. We can use the cron service to schedule regular backup on a specific time, schedule updates and synchronization of files. Can be used as one-time event or recurring tasks.

The crond daemon is the background service that enables cron functionality.

Cron wakes up every minute and checks schedule tasks in crontable. Crontab (CRON TABLE) is a table where we can schedule such kind of repeated tasks.

The Crontab command creates a crontab file containing commands and instructions for the cron daemon to execute.

Which all operations can be performed using crontab:

// To install filename as your crontab file, this command can be executed without -a option too.

crontab -a filename

// To edit crontab file or create one if it doesn’t exist.

crontab -e

// To display your crontab file.

crontab -l

// To remove your crontab file.

crontab -r

// List scheduled cron jobs of a particular user.

crontab -u username -l

A crontab file has a specific format of six parameters:

  minute(s) hour(s) day(s) month(s) weekday(s) command(s)

( * )  is used for all

eg: * * * * * (every minute, every hour, every day, every month and every weekday).

How to define a cronjob:

  * * * * * pwd > /home/knoldus/blog.txt

Above cronjob is storing “present working directory” to a file ../blog.txt which is scheduled after every minute.

Steps to configure Cronjob using Crontab:

  1. Create a cronjob file   ex: =>  cron.conf
  2. Add your cronjob pattern and command in your file   ex: =>   * * * * * pwd >/home/knoldus/blog.txt
  3. Configure your file using crontab => crontab cron.conf.

Automation of the cronjob using ansible:

The main yaml file ( playbook.yml ) which exist in the root of your project is:

---
- hosts: aws-setup
  gather_facts: yes
  remote_user: ec2-user
  become: yes
  roles:
  - crontab_scheduler

the inventory file for this playbook consists the information of host machines grouped as [ aws-setup ]. The above playbook consists of two roles:

  1. Crontab_scheduler: This role schedules a job which writes into another file after every minute hour day month weekday the pwd (present working directory into another file).

The playbook for the role crontab_scheduler is  :

---
- name: Crontab Basic Introduction
  shell: touch cron.conf

- name: create cronjob to schedule output after every year,month,week,hour,minute
  shell: echo " * * * * * pwd >>  /tmp/output.txt " > cron.conf

- name: configure cronjob via crontab scheduler
  shell:  crontab cron.conf

- name: listing cronjobs via crontab scheduler
  shell: crontab -l

- name: remove cronjob from crontab scheduler
  shell: crontab -r

Screenshot from 2018-10-15 12-40-03

output for this role is: (keeps on appending after every single minute)

Screenshot from 2018-10-15 12-46-17

output file keeps on appending after every minute.

Screenshot from 2018-10-15 12-47-49

References:

Insights and perspectives to keep you updated.

https://docs.ansible.com/

https://www.tutorialspoint.com/unix_commands/crontab.htm


Written by 

Neelam is a software consultant with experience of more than 6 months. She likes to keep up with the trending technologies. She is familiar with languages such as C, C++, Java, Scala, Angular 4 and is currently working on lagom with java. Her hobbies includes playing Table Tennis and listening music.