]> gitweb.fluxo.info Git - puppet-backup.git/commitdiff
Adding back lockfile code on rsync handler
authorSilvio Rhatto <rhatto@riseup.net>
Sat, 12 May 2012 14:00:35 +0000 (11:00 -0300)
committerSilvio Rhatto <rhatto@riseup.net>
Sat, 12 May 2012 14:00:35 +0000 (11:00 -0300)
files/handlers/rsync

index 01a2987ab9a197c6401c4d3554a7fffecbfc93cb..cb4db4635fbe6d85fe5c31c93c7b348c5eb7fefe 100644 (file)
@@ -39,6 +39,7 @@
 #   keepdaily = for long storage format, specify the number of daily backup increments
 #   keepweekly = for long storage format, specify the number of weekly backup increments
 #   keepmonthly = for long storage format, specify the number of monthly backup increments
+#   lockfile = lockfile to be kept during backup execution
 #   nicelevel = rsync command nice level
 #   enable_mv_timestamp_bug = set to "yes" if your system isnt handling timestamps correctly
 #   tmp = temp folder
@@ -128,6 +129,7 @@ function eval_config {
   getconf keepdaily 5
   getconf keepweekly 3
   getconf keepmonthly 1
+  getconf lockfile
   getconf nicelevel 0
   getconf enable_mv_timestamp_bug no
   getconf tmp /tmp
@@ -892,6 +894,45 @@ function test_connect {
 
 }
 
+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
+      fatal "Could not create lockfile $lockfile, exiting"
+    fi
+  fi
+
+}
+
+function unset_lockfile {
+
+  if [ ! -z "$lockfile" ]; then
+    $rm -f $lockfile || warning "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
+      info "Another backup is running for $lockfile, skipping run"
+      exit
+    else
+      info "Found old lockfile $lockfile, removing it"
+      unset_lockfile  
+    fi
+  fi
+
+}
+
 function set_filelist {
 
   filelist_flag=""
@@ -1103,6 +1144,8 @@ function restore_pipefail {
 # the backup procedure
 
 eval_config
+check_lockfile
+set_lockfile
 set_rsync_options
 start_mux
 stop_services
@@ -1136,6 +1179,7 @@ restore_pipefail
 mount_ro
 run_fsck
 start_services
+unset_lockfile
 end_mux
 
 echo "Finnishing backup at `date`" >> $log