Search code examples
bashmessageexitrsync

Bash script for automatic rsync backups does not display correct exit message


I was working on my bash script that would backup files from all of my servers and then cron would email me the output via email, but even if the rsync has failed i receive a message that it has succeeded. Please help me with finding the issue int the following code:

#!/bin/bash
echo "##############################"
echo "Initializing a backup"
echo "##############################"
sleep 5

echo ""
echo ""
echo "#########################"
echo "Backup of TS3Intel begins"
echo "#########################"
echo ""
echo ""
sleep 5
rsync -avP --delete root@xxxxxx:/home/ts3/TS3 /media/SYNC/TS3Intel
retval=$?
if [ $? -eq 0 ]; then
    echo ""
    echo ""
    echo "VVVVVVVVVVVVVVVVVVVVVVVVVVVV"
    echo "Backup of TS3Intel completed"
    echo "VVVVVVVVVVVVVVVVVVVVVVVVVVVV"
    echo ""
    echo ""
    sleep 2
else
    echo ""
    echo ""
    echo "XXXXXXXXXXXXXXXXXXXXXXXXX"
    echo "Backup of TS3Intel failed"
    echo "XXXXXXXXXXXXXXXXXXXXXXXXX"
    echo ""
    echo ""
    sleep 2
fi


echo ""
echo ""
echo "#########################"
echo "Backup of TSCrispy begins"
echo "#########################"
echo ""
echo ""
sleep 5
rsync -avP --delete root@xxxxxxxx:/home/TS3 /media/SYNC/TS3Crispy
retval=$?
if [ $? -eq 0 ]; then
    echo ""
    echo ""
    echo "VVVVVVVVVVVVVVVVVVVVVVVVVVVV"
    echo "Backup of TSCrispy completed"
    echo "VVVVVVVVVVVVVVVVVVVVVVVVVVVV"
    echo ""
    echo ""
    sleep 2
else
    echo ""
    echo ""
    echo "XXXXXXXXXXXXXXXXXXXXXXXXX"
    echo "Backup of TSCrispy failed"
    echo "XXXXXXXXXXXXXXXXXXXXXXXXX"
    echo ""
    echo ""
    sleep 2
fi

echo ""
echo ""
echo "##########################"
echo "Backup of CrispyWEB begins"
echo "##########################"
echo ""
echo ""
sleep 5
rsync -avP --delete -e "ssh -p 22" root@xxxxxxxx:/var/www /media/SYNC/
retval=$?
if [ $? -eq 0 ]; then
    echo ""
    echo ""
    echo "VVVVVVVVVVVVVVVVVVVVVVVVVVVVV"
    echo "Backup of CrispyWEB completed"
    echo "VVVVVVVVVVVVVVVVVVVVVVVVVVVVV"
    echo ""
    echo ""
    sleep 2
else
    echo ""
    echo ""
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXX"
    echo "Backup of CrispyWEB failed"
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXX"
    echo ""
    echo ""
    sleep 2
fi

echo ""
echo ""
echo "############################"
echo "Backup of MYSQLCrispy begins" 
echo "############################"
echo ""
echo ""
sleep 5
rsync -avP --delete -e "ssh -p 22" root@xxxxxxxx:/root/mysqldump /media/SYNC/mysql
retval=$?
if [ $? -eq 0 ]; then
    echo ""
    echo ""
    echo "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV"
    echo "Backup of MYSQLCrispy completed" 
    echo "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV"
    echo ""
    echo ""
    sleep 2
else
    echo ""
    echo ""
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    echo "Backup of MYSQLCrispy failed"
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXX" 
    echo ""
    echo ""
    sleep 2
fi

echo ""
echo ""
echo "########################"
echo "Backup of TSBumba begins"
echo "########################"
echo ""
echo ""
sleep 5
rsync -avP --delete -e "ssh -p 696" root@xxxxxxxx:/home/teamspeak3-server_linux-amd64 /media/SYNC/TSBumba
retval=$?
if [ $? -eq 0 ]; then
    echo ""
    echo ""
    echo "VVVVVVVVVVVVVVVVVVVVVVVVVVV"
    echo "Backup of TSBumba completed"
    echo "VVVVVVVVVVVVVVVVVVVVVVVVVVV"
    echo ""
    echo ""
    sleep 2
else
    echo ""
    echo ""
    echo "XXXXXXXXXXXXXXXXXXXXXXXX" 
    echo "Backup of TSBumba failed"
    echo "XXXXXXXXXXXXXXXXXXXXXXXX"
    echo ""
    echo ""
    sleep 2
fi 

echo ""
echo ""
echo "########################"
echo "Compressing files begins" 
echo "########################".
echo ""
echo ""
sleep 5
tar czf /media/SYNCtar/copy_$today.tar.gz  /media/SYNC/
retval=$?
if [ $? -eq 0 ]; then
    echo ""
    echo ""
    echo "VVVVVVVVVVVVVVVVVVVVVVVVVVV"
    echo "Compressing files completed"
    echo "VVVVVVVVVVVVVVVVVVVVVVVVVVV"
    echo ""
    echo ""
    sleep 2
else
    echo ""
    echo ""
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXX"
    echo "Compressing of files failed"
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXX"
    echo ""
    echo ""
    sleep 2
fi

echo ""
echo ""
echo "#############################"
echo "Downloading site files begins" 
echo "#############################"
echo ""
echo ""
sleep 5
rsync -avP --delete -e "ssh -p 696" root@xxxxxxxx:/var/www /var/www/kopie/
retval=$?
if [ $? -eq 0 ]; then
    echo ""
    echo ""
    echo "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV"
    echo "Download of site files completed"
    echo "VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV"
    echo ""
    echo ""
    sleep 2
else
    echo ""
    echo ""
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    echo "Downloading of site files failed"
    echo "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    echo ""
    echo ""
    sleep 2
fi

This is sample output of just the part of this code:

05:19:21 Klocex@root [~/sync]: ./1.sh


#########################
Backup of TSCrispy begins
#########################


receiving incremental file list
^Crsync error: unexplained error (code 130) at rsync.c(632) [generator=3.1.1]rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at io.c(504) [receiver=3.1.1]

rsync: [generator] write error: Broken pipe (32)


VVVVVVVVVVVVVVVVVVVVVVVVVVVV
Backup of TSCrispy completed
VVVVVVVVVVVVVVVVVVVVVVVVVVVV

Even that the rsync was stopped by me, it gave me the message that it has succeeded.

PS: IPs in rsync script are changed to xxx on purpose of posting on forum.


Solution

  • if [ $? -eq 0 ]
    

    could be replaced with:

    if [ "$retval" -eq 0 ]
    

    In fact the program can be greatly simplified by using the return value of rsync directly like this:

    if rsync -avP --delete -e "ssh -p 22" root@xxxxxxxx:/root/mysqldump /media/SYNC/mysql
    then ....