]> git.sesse.net Git - backup.sh/blobdiff - backup.sh
Log to both stderr and stdout
[backup.sh] / backup.sh
index c4330309ea2d685208766d08a3aa3d99ad6adbe2..a5cc91570a4455e7f90a258a481f761295070fdb 100755 (executable)
--- a/backup.sh
+++ b/backup.sh
@@ -20,6 +20,7 @@ trap die SIGINT SIGTERM
 # Don't start if we're already running
 if [ -e $LOCKFILE ]; then
        echo `date`": $LOCKFILE exists, exiting."
+       echo `date`": $LOCKFILE exists, exiting." >&2
        exit 1
 fi;
 touch $LOCKFILE
@@ -95,7 +96,7 @@ backup()
  fi
 
  #expand the exclude-path for use with tar
- exf=`ssh $computer "ls ~/.backup/exclude"`
+ exf=`ssh root@$computer "ls ~/.backup/exclude"`
 
  #We try to run tar on the remote computer
  #    z gzip it
@@ -109,11 +110,11 @@ backup()
  #    ..to dd, to output to a file. We surpress messages from dd.
  #    And at last, redirect stderr to stdout, to get output logged.
  TARFILE=$DATE.tmp
- TARCMD="ssh $computer \"$tar --one-file-system -zcf - -C $filesystem . $lastcmd \
+ TARCMD="ssh root@$computer \"$tar --one-file-system -zcf - -C $filesystem . $lastcmd \
        --exclude-from=$exf\" > $TARFILE"
  echo `date`" $computer: Running $TARCMD" >&2
-
- if eval $TARCMD; then
+ eval $TARCMD;
+ if [ -s $TARFILE ]; then
   mv $TARFILE $DATE.tgz
   #make a filelist.
   #update the datefile if the filelist is ok.
@@ -122,7 +123,7 @@ backup()
     touch -t $DATE ../.date
 
   #make a sortet filelist
-  grep -v ^d $DATE.idx | sort -n -r +2 > $DATE.sdx
+  grep -v ^d $DATE.idx | sort -n -r -k 2 > $DATE.sdx
 
   #fix perm
   chmod 600 *tgz                      #only for us
@@ -146,59 +147,65 @@ do
  echo `date`" $computer: Backing up $computer" >&2
 
  # Try to SSH to the computer without entering a password.
- if ! `ssh -n -o NumberOfPasswordPrompts=0 $computer /bin/true`; then
+ if ! `ssh -n -o NumberOfPasswordPrompts=0 root@$computer /bin/true`; then
   echo `date`" $computer: Could not use passwordless SSH."
 
   # We don't want to return 0
   R=1
-  break;
+  # Do next computer
+  continue;
  fi
  
  #tømmer variabelen for sikkerhets skyld
  filesystems=""
 
  #Sjekker nest siste felt i fstab. Om det er 0 tar vi ikke backup
- filesystems=`ssh -n $computer "cat /etc/fstab" \
+ filesystems=`ssh -n root@$computer "cat /etc/fstab" \
   | grep -v nfs \
   | grep -v "^#" \
   | grep -v "^$" \
   | awk '{ if ( $(NF-1) != "0" ) print $2}' `
 
  #clean up our dir at this client
- if ! ssh $computer "rm -r ~/.backup ; mkdir -m 700 ~/.backup"; then
-  echo `date`" $computer: Could not create backup staging area at $computer:~/.backup"
+ 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"
   # We don't want to return 0
   R=1
-  break;
+  continue;
  fi
 
  #try to copy $exclude to $computer
- if ! scp $exclude $computer:~/.backup/exclude > /dev/null; then
-  echo `date`" $computer: Could not copy exclude.txt 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"
   # We don't want to return 0
   R=1
-  break;
+  continue;
  fi
 
  #try to copy preeexec and postexec if they exist
 # TODO: Gah, clean this mess!
  [ -f $confdir/preexec.$computer ] && (
-    scp $confdir/preexec.$computer  $computer:~/.backup/preexec ||
-     ( echo `date`" $computer: Could not copy preexec.$computer to $computer:~/.backup/preexec";
+    scp $confdir/preexec.$computer  root@$computer:~/.backup/preexec >&2 ||
+     ( echo `date`" $computer: Could not copy preexec.$computer to $computer:~/.backup/preexec - skipping backup of $computer"
        R=1
-       break
+       continue
      )
     )
  [ -f $confdir/postexec.$computer ] && (
-    scp $confdir/postexec.$computer $computer:~/.backup/postexec ||
-     ( echo `date`" $computer: Could not copy postexec.$computer to $computer:~/.backup/postexec"
-       break
+    scp $confdir/postexec.$computer root@$computer:~/.backup/postexec >&2 ||
+     ( echo `date`" $computer: Could not copy postexec.$computer to $computer:~/.backup/postexec - skipping backup of $computer"
        R=1
+       continue
      )
     )
 
  #try to run preexec if it exist
- ssh $computer "[ -f ~/.backup/preexec ] && /bin/bash -x ~/.backup/preexec"
+ 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
+ fi
+
 
  for filesystem in $filesystems
  do
@@ -241,7 +248,7 @@ do
   fi
 
   #delete complete backups
-  for full in `ls -1t $storagedir/$computer/$sfilesystem/full/*tgz | tail +$mf`
+  for full in `ls -1t $storagedir/$computer/$sfilesystem/full/*tgz | tail -n +$mf`
   do
    prefix=`echo $full | sed "s/\.[^.]*$//"`
    echo `date`": $computer:$filesystem sletter full $prefix (for mange)" >&2
@@ -258,7 +265,10 @@ do
  done
 
  #try to run postexec if it exist
- ssh $computer "[ -f ~/.backup/postexec ] && /bin/bash -x ~/.backup/postexec"
+ 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
+ fi
 
 )  
 done &
@@ -269,6 +279,8 @@ wait
 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