From f6eb153b9161237f93d0809b912263fffeec7934 Mon Sep 17 00:00:00 2001 From: Silvio Rhatto Date: Sat, 26 Feb 2011 15:45:39 -0300 Subject: Lockfile support for check-puppetd --- templates/check-puppetd.sh.erb | 50 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/templates/check-puppetd.sh.erb b/templates/check-puppetd.sh.erb index 298c2b2..d64c21b 100644 --- a/templates/check-puppetd.sh.erb +++ b/templates/check-puppetd.sh.erb @@ -6,17 +6,65 @@ PATH="$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin" PID="/var/run/puppet/<%= puppet_agent_name %>.pid" INIT="/etc/init.d/puppet" +LOCKFILE="/var/run/puppet/check-puppetd.pid" function puppet_start { + sleep `echo $RANDOM/2000*60 | bc` $INIT start + } function puppet_restart { + $INIT stop puppet_start + +} + +function set_lockfile { + + if [ ! -z "$LOCKFILE" ]; then + mkdir -p `dirname $LOCKFILE` + if ( set -o noclobber; echo "$$" > "$LOCKFILE" ) &> /dev/null; then + trap 'unset_lockfile' INT TERM EXIT + else + echo "Could not create lockfile $LOCKFILE, exiting" + exit 1 + fi + fi + +} + +function unset_lockfile { + + if [ ! -z "$LOCKFILE" ]; then + $rm -f $LOCKFILE || echo "Could not remove lockfile $LOCKFILE" + fi + } +function check_lockfile { + + local pid process + + if [ ! -z "$LOCKFILE" ] && [ -f "$LOCKFILE" ]; then + pid="`cat $LOCKFILE`" + process="`ps --no-headers -o comm $pid`" + if [ "$?" == "0" ] && [ "`ps --no-headers -o comm $$`" == "$process" ]; then + echo "Another backup is running for $LOCKFILE, skipping run" + exit + else + echo "Found old lockfile $LOCKFILE, removing it" + unset_lockfile + fi + fi + +} + +check_lockfile +set_lockfile + if [ "$1" == "restart" ]; then puppet_restart elif [ ! -f "$PID" ]; then @@ -27,3 +75,5 @@ else puppet_start fi fi + +unset_lockfile -- cgit v1.2.3