From 64da3228b66d5687c89f26328ed354ccdcd02aea Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Sat, 4 Oct 2014 22:46:44 +0200 Subject: [PATCH] Remove the built-in forking support; take that from cron instead. --- backup.sh | 74 ++++++++++++++----------------------------------------- 1 file changed, 19 insertions(+), 55 deletions(-) diff --git a/backup.sh b/backup.sh index aceb9f3..ce6c6d4 100755 --- a/backup.sh +++ b/backup.sh @@ -18,11 +18,6 @@ # to stderr and warnings and errors to stdout. This way, we get mail whenever # stuff fails, and other output is redirected to the log file. # -# The computers are backed up in parallel (but the filesystems on each -# computer in serial). This is implemented highly simplistic, with forking -# subshells. The script has no concept about threads, and stuff might go wrong, -# which usually requires manual cleanups. -# # The script is halfway Norwegian and halfway English. Newer modifications are # in English, we should probably stick to that. # @@ -33,8 +28,11 @@ # right now. # +# The computer to backup. +computer=$1 + # Configuration -LOCKFILE=/home/backup/backuprun.lockfile +LOCKFILE=/home/backup/backuprun.lockfile.$computer confdir=/home/backup/conf/ # Configuration files storagedir=/backup # Where we keep backups maksantallfulle=3 # Number of full backups @@ -49,15 +47,15 @@ DATEs=`date "+%Y-%m-%d %H:%M"` #format: tar exclude=$confdir/exclude [ ! -f $exclude ] && printf "tmp\ncore\n" > $exclude -# Initially, we consider everything to be just fine. -R=0 +if [ -z "$computer" ]; then + echo "Usage: $0 COMPUTER" + exit 1 +fi # Die more or less gracefully (at least notify user) die() { - echo `date`": Something nasty happened, and since I fork a lot:" - echo `date`": I CANNOT CLEAN UP THE MESS MYSELF." - echo `date`": You need to get rid of lost process named stuff like $0, tar and ssh." - exit 255 + echo `date`": Something nasty happened. Ending, and not deleting lockfile $LOCKFILE." + exit 1 } # Trap C-c and kill @@ -85,15 +83,6 @@ echo `date`": Backup run starting" >&2 umask 027 -# The computers we want to back up -unixcomputers=`cat $confdir/computers.unix \ - | grep -v "^#" \ - | grep -v "^$" ` - -# Backup only one computer, from command line? -if [ $1 ] ; then - unixcomputers=$1 -fi #selve backupen # krever at noen variabler er satt @@ -156,21 +145,18 @@ backup() echo `date`" $computer: $TARFILE empty. $backuplevel backup of $computer:$filesystem failed and deleted" # We don't want to return 0 - R=1 + die fi } -for computer in $unixcomputers -do -( # Check that the target filesystem is mounted (actually check that it's not # the root filesystem) rootfilesystem=`df -P /` targetfilesystem=`df -P "$storagedir/$computer"` if [ "$rootfilesystem" == "$targetfilesystem" ]; then echo `date`" $computer: Target filesystem ($storagedir/$computer) was mounted on /. Aborting" - continue + die fi echo `date`" $computer: Backing up $computer" >&2 @@ -180,9 +166,7 @@ do echo `date`" $computer: Could not use passwordless SSH." # We don't want to return 0 - R=1 - # Do next computer - continue; + die fi filesystems="" @@ -197,38 +181,33 @@ do # Clean up our dir at this client if ! ssh root@$computer "rm -r ~/.backup ; mkdir -m 700 ~/.backup"; then echo `date`" $computer: Could not create backup staging area at $computer:~/.backup - skipping backup of $computer" - R=1 - continue; + die fi # Try to copy $exclude to $computer if ! scp $exclude root@$computer:~/.backup/exclude > /dev/null; then echo `date`" $computer: Could not copy exclude.txt to $computer - skipping backup of $computer" - R=1 - continue; + die fi # Try to copy preeexec and postexec if they exist if [ -f $confdir/preexec.$computer ]; then if ! scp $confdir/preexec.$computer root@$computer:~/.backup/preexec >&2; then echo `date`" $computer: Could not copy preexec.$computer to $computer:~/.backup/preexec - skipping backup of $computer" - R=1 - continue + die fi fi if [ -f $confdir/postexec.$computer ]; then if ! scp $confdir/postexec.$computer root@$computer:~/.backup/postexec >&2; then echo `date`" $computer: Could not copy postexec.$computer to $computer:~/.backup/postexec - skipping backup of $computer" - R=1 - continue + die fi fi # Try to run preexec if it exist if ! ssh root@$computer "[ ! -f ~/.backup/preexec ] || /bin/bash -x ~/.backup/preexec" >&2; then echo `date`" $computer: Could not run $computer:~/.backup/preexec - skipping backup of $computer" - R=1 - continue + die fi @@ -307,23 +286,8 @@ do # Try to run postexec if it exist if ! ssh root@$computer "[ ! -f ~/.backup/postexec ] || /bin/bash -x ~/.backup/postexec" >&2; then echo `date`" $computer: Could not run $computer:~/.backup/postexec" - R=1 + die fi -) & -done - -wait - # Remove lockfile rm $LOCKFILE - -# Did anything go wrong? -# (IMPORTANT NOTE: The R-business does not work as expected, since this script -# forks itself). -if [ $R != 0 ]; then - echo `date`": Backup run ended with errors, check logs." - exit 1 -else - echo `date`": Backup run ended" >&2 -fi -- 2.39.2