Cron Singleton

Fri 03 July 2015 by Godson

Many times we have to run some tasks periodically. 'Cron' is Linux utility intended for such taks.

Now consider following scenario.

You'r performing one non-deterministic task for every 5min using cron utility. And at one point, time to finish a task exceeds 5 min. What will happen in this case ? Another instance of task will be created. In worst case scenarios, there will be hundreds of instances of same task running, ultimately crashing system. To avoid such events, use cron singleton. This singleton ensures that at a time only one instance of taks will be running. Following is example of such singleton.

#!/bin/bash

lockfile=/var/tmp/bamlock

if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null; then
    trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT
    # run job
    /opt/foo/bar/baz/qux.py
else
    echo "Lock Exists: $lockfile owned by $(cat $lockfile)"
fi