Wednesday, August 4, 2010

Simple cron locking system

Run cron jobs safely, using locking. Cron lock prevents running a cronjob if the first one didn't finished running (prevents cron overlaps).

2 files are used:
- cron-job1.sh
- cron-job1.lock

Contents of cron-job1.lock will be:
- free - if it's free, cron-job1.sh is NOT running
- locked - if cron-job1.sh is running

Locking script (cron-job1.sh):

#!/bin/bash

lock_file="cron-job1.lock"

lock_content=`cat $lock_file`

if [[ "$lock_content" == "free" ]] ; then

    echo "locked" > $lock_file
  
    # do stuff here:
    cd /some-dir
    php compute-things.php
    php email-results.php

    echo "free" > $lock_file

else
    echo "script already running, file $lock_file is not free"
fi

No comments: