Manage locking into bash scripts
From WikiOAR
Every bash script started fron cron should begin like this
(Using lockfile-progs under Debian. For other distribs, you can use "lockfile -r3 -l 43200 $LOCK" often found into the sendmail package)
#!/bin/bash
set -e
# Locking
LOCK=/var/lock/`basename $0`
lockfile-create $LOCK || exit 2
lockfile-touch $LOCK &
BADGER="$!"
function remove_lock {
kill "${BADGER}" 2>/dev/null || true
lockfile-remove $LOCK
}
# Exit trap function
function exit_on_error {
echo "Exiting on error..."
remove_lock
exit 1
}
# Exit on kill
function exit_on_kill {
echo "Killed, exiting..."
remove_lock
exit 1
}
# Exit normaly
function exit_on_end {
echo "Exiting..."
remove_lock
exit 0
}
trap exit_on_kill KILL
trap exit_on_error ERR
trap exit_on_end QUIT TERM EXIT INT
## SCRIPT STARTS HERE ##
Why?
Because if you run a script periodically using cron, you never know if your script has ended before the next period when the script is ran again and in case of a deadlock, you may overflow your system.
