summaryrefslogtreecommitdiffabout
authorSergey Poznyakoff <gray@gnu.org.ua>2013-03-21 11:34:51 (GMT)
committer Sergey Poznyakoff <gray@gnu.org.ua>2013-03-21 11:34:51 (GMT)
commit6c6ab3125da430bdaafb9bacc88c32279a961525 (patch) (side-by-side diff)
treeef8f4005504a8545eaab5b111890649ba0302d2c
parent194f4b1204d6e49ba0af7dd761f8c794ba37c035 (diff)
downloadbeam-6c6ab3125da430bdaafb9bacc88c32279a961525.tar.gz
beam-6c6ab3125da430bdaafb9bacc88c32279a961525.tar.bz2
Prevent reentrant invocations. Minor bugfix.
At startup a pid file is checked. If it exists, another beam process is assumed to be running and start up is aborted. Otherwise a new pid file is created. The existing pid is removed before exiting (by epilogue_hook). * backup.in (prologue_hook): Prepend beam_lock. * lib/beam/common.in (backup_pidfile): New global. (beam_lock,beam_unlock): New functions. * lib/beam/s3.sh (s3_getmpoint): Fix regexp to take into account s3backer invocation without --vhost.
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--backup.in1
-rw-r--r--lib/beam/common.in17
-rw-r--r--lib/beam/s3.sh12
3 files changed, 26 insertions, 4 deletions
diff --git a/backup.in b/backup.in
index 615fa12..ca479b1 100644
--- a/backup.in
+++ b/backup.in
@@ -124,2 +124,3 @@ backup() {
umask ${backup_umask:-077}
+prologue_hook="beam_lock $prologue_hook"
diff --git a/lib/beam/common.in b/lib/beam/common.in
index 1be075e..7e69640 100644
--- a/lib/beam/common.in
+++ b/lib/beam/common.in
@@ -32,2 +32,3 @@ backup_verbose=
backup_logfile="/var/log/backup"
+backup_pidfile="/var/run/beam.pid"
backup_tmp_dir=/tmp
@@ -49,2 +50,18 @@ abend() {
+beam_lock() {
+ if [ -r $backup_pidfile ]; then
+ pid=$(head -n 1 $backup_pidfile)
+ if [ -z "$pid" ]; then
+ abend "pidfile $backup_pidfile exists but is unreadable or empty"
+ fi
+ abend "another beam process (pid $backup_pid) is still running; exiting"
+ fi
+ echo $$ > $backup_pidfile || exit 1
+ epilogue_hook="$epilogue_hook beam_unlock"
+}
+
+beam_unlock() {
+ rm -f $backup_pidfile
+}
+
tarcode() {
diff --git a/lib/beam/s3.sh b/lib/beam/s3.sh
index de71456..d2fcfe6 100644
--- a/lib/beam/s3.sh
+++ b/lib/beam/s3.sh
@@ -28,5 +28,12 @@ s3_getmpoint()
case $1 in
+# Sample mount output, split into several lines:
+# a) With --vhost:
+# http://BUCKETNAME.s3.amazonaws.com/ on /mnt/s3backer type fuse.s3backer
+# (rw,nosuid,nodev,allow_other,default_permissions)
+# b) Without --vhost:
+# http://s3.amazonaws.com/BUCKETNAME/ on /mnt/s3backer type fuse.s3backer
+# (rw,nosuid,nodev,allow_other,default_permissions)
backer)
mount -tfuse.s3backer |
- awk '/https?:\/\/'$backup_bucket_name'/ { print $3 }';;
+ awk '/https?:\/\/.*'$backup_bucket_name'/ { print $3 }';;
s3)
@@ -52,5 +59,2 @@ s3_mount() {
-# Sample mount output, split into several lines:
-# http://finox-backup-fs.s3.amazonaws.com/ on /mnt/s3backer type fuse.s3backer
-# (rw,nosuid,nodev,allow_other,default_permissions)
set -- $(s3_getmpoint backer)

Return to:

Send suggestions and report system problems to the System administrator.