]> gitweb.fluxo.info Git - puppet-puppet.git/commitdiff
Lockfile support for check-puppetd
authorSilvio Rhatto <rhatto@riseup.net>
Sat, 26 Feb 2011 18:45:39 +0000 (15:45 -0300)
committerSilvio Rhatto <rhatto@riseup.net>
Sat, 26 Feb 2011 18:45:39 +0000 (15:45 -0300)
templates/check-puppetd.sh.erb

index 298c2b22c353eb37357ba1386b6e64ad6210792e..d64c21ba49fe1d80026fa8270decd683b7bb1c34 100644 (file)
@@ -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