summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Hannah <james@tlyk.eu>2014-06-11 10:59:30 +0100
committerJames Hannah <james@tlyk.eu>2014-06-11 10:59:30 +0100
commit7524f76a38735c87018761476000e507be81d610 (patch)
tree3e0bf7a5c10cea71cf7f69cd73bc88b4acfd831a
parent27cae4ff24f03019b1827efbb542718162251dce (diff)
Added lockfile stuff
-rwxr-xr-xbyteback-backup38
1 files changed, 38 insertions, 0 deletions
diff --git a/byteback-backup b/byteback-backup
index 22fe0fb..b1f321d 100755
--- a/byteback-backup
+++ b/byteback-backup
@@ -9,6 +9,12 @@
require 'getoptlong'
require 'resolv'
+def remove_lockfile!
+ begin
+ File.unlink(@lockfile)
+ rescue Errno::ENOENT
+ end
+end
def error(message)
STDERR.print "*** #{message}\n"
@@ -33,6 +39,7 @@ Options:
--ssh-key, -k <s>: SSH key for connection (default: /etc/byteback/key)
--help, -h: Show this message
EOF
+ remove_lockfile!
exit 0
end
@@ -53,6 +60,8 @@ opts = GetoptLong.new(
@retry_delay = 1800
@sources = nil
@excludes = nil
+@lockfile = "/var/run/byteback/byteback.lock"
+
# Read the default destination
if File.exists?("/etc/byteback/destination")
@@ -103,6 +112,34 @@ rescue => err
help = true
end
+# Check the lockfile first
+if Dir.exists?(File.dirname(@lockfile))
+ if File.exists? @lockfile
+ # check the lockfile is sane
+ exist_pid = File.read(@lockfile).to_i
+ if exist_pid > 1 and exist_pid < (File.read("/proc/sys/kernel/pid_max").to_i)
+ begin
+ Process.getpgid(exist_pid)
+ # if no exception, process is running, abort
+ error("Process is running (#{exist_pid} from #{@lockfile})! Exiting now.")
+ rescue Errno::ESRCH
+ # no process running with that pid, pidfile is stale
+ remove_lockfile!
+ end
+ else
+ # lockfile isn't sane, remove it and continue
+ remove_lockfile!
+ end
+ end
+else
+ Dir.mkdir(File.dirname(@lockfile))
+ # lockfile didn't exist so just carry on
+end
+
+# Own the pidfile ourselves
+File.open(@lockfile, "w") do |lockfile|
+ lockfile.puts Process::pid
+end
#
# Check our destination
@@ -214,3 +251,4 @@ end
error("Backup could not be marked complete") unless
ssh("sudo", "byteback-snapshot", "--snapshot", ($VERBOSE ? "--verbose" : ""))
+remove_lockfile!