diff --git a/Backup-Util.sh b/Backup-Util.sh index 6ba678f..1b3da73 100644 --- a/Backup-Util.sh +++ b/Backup-Util.sh @@ -1,3 +1,4 @@ +#!/bin/bash #Check for Backup-Util config file ScriptLocation="`dirname \"$0\"`" if [ ! -f "$ScriptLocation/Backup-Util.conf" ]; then @@ -7,6 +8,36 @@ if [ ! -f "$ScriptLocation/Backup-Util.conf" ]; then exit fi +# Use this function to check the exit code and set the first argment is used to set the error message +Errored=false +ErrorCMD=False +function ErrorCheck (){ + #Check if command exited correctly, else repport the error + ExitCode=$? + if [ $ExitCode -eq 0 ] ; then + unset ExitCode + return 0 + fi + ErrorMSG=$1 + #Store Error log + ErrorLog="$ErrorLog $ErrorMSG (ExitCode $ExitCode)\n" + if [ -n "$2" ]; then + SendErrorMSG + exit 2 + fi + export Errored=True + unset ExitCode ErrorMSG +} + +function SendErrorMSG (){ + #Print error log + printf "Error:\n$ErrorLog" + #Check if Custom error command is setup, if so execute it + if [ "$ErrorCMD" != False ] ; then + $ErrorCMD "$ErrorLog" + fi +} + function SiteBackup () { WPUPDATE=0 @@ -96,9 +127,11 @@ if [ "$AI1" = "1" ]; then sudo -u "$SITENAME" wp --path="$SITEDIR" ai1wm backup if [ $SITEBACKENC -eq 1 ] ; then find "$SITEDIR"/wp-content/ai1wm-backups/ -name "*.wpress" -printf "%P\n"| tar -czf - --no-recursion -C "$SITEDIR"/wp-content/ai1wm-backups/ -T - | openssl enc -e -aes256 -pass file:"$ScriptLocation"/key.bin -out /"$SITESENDDIR"/"$SITENAME"-ai1wm.tar.gz #Create ai1wm tar File + ErrorCheck "WP-ENC-Backup $SITENAME" cp "$ScriptLocation"/key.bin.enc /"$SITESENDDIR"/"$SITENAME"-ai1wm.key.enc else find "$SITEDIR"/wp-content/ai1wm-backups/ -name "*.wpress" -printf "%P\n"| tar -czf /"$SITESENDDIR"/"$SITENAME"-ai1wm.tar.gz --no-recursion -C "$SITEDIR"/wp-content/ai1wm-backups/ -T - #Create ai1wm tar File + ErrorCheck "WP-Backup" fi rm -f "$SITEDIR"/wp-content/ai1wm-backups/*.wpress fi @@ -108,23 +141,28 @@ if [ "$NODB" != "1" ]; then for i in "${DBARRY[@]}" do mysqldump -u "$DBUSER" "$i" --password="$DBPASS" --default-character-set=utf8 > "$TMPDIR"/"$SITENAME"-"$i".sql + ErrorCheck "Mysql-Backup $SITENAME-$i" done if [ $SITEBACKENC -eq 1 ] ; then find "$TMPDIR" -name "*.sql" -printf "%P\n"| tar -czf - --no-recursion -C "$TMPDIR" -T - | openssl enc -e -aes256 -pass file:"$ScriptLocation"/key.bin -out /"$SITESENDDIR"/"$SITENAME"-DB.tar.gz #Create tar File + ErrorCheck "Mysql-Backup-ENC $SITENAME-$i" cp "$ScriptLocation"/key.bin.enc /"$SITESENDDIR"/"$SITENAME"-DB.key.enc else find "$TMPDIR" -name "*.sql" -printf "%P\n"| tar -czf /"$SITESENDDIR"/"$SITENAME"-DB.tar.gz --no-recursion -C "$TMPDIR" -T - #Create tar File - fi + ErrorCheck "Mysql-Backup-Pack $SITENAME-$i" + fi rm -f /"$TMPDIR"/*.sql fi -#Taronmogelijking SiteFiles files +#Tar SiteFiles files if [ "$SNOTAR" != "1" ]; then if [ $SITEBACKENC -eq 1 ] ; then tar -zcf - $SITEDIR $SITEEF | openssl enc -e -aes256 -pass file:"$ScriptLocation"/key.bin -out /"$SITESENDDIR"/"$SITENAME"-Files.tar.gz #Create tar File - cp "$ScriptLocation"/key.bin.enc /"$SITESENDDIR"/"$SITENAME"-Files.key.enc + ErrorCheck "SiteTar-Backup-ENC $SITENAME" + cp "$ScriptLocation"/key.bin.enc /"$SITESENDDIR"/"$SITENAME"-Files.key.enc else tar $tarextracmd -zcf /"$SITESENDDIR"/"$SITENAME"-Files.tar.gz $SITEDIR $SITEEF + ErrorCheck "SiteTar-Backup $SITENAME" fi fi @@ -132,20 +170,25 @@ fi if [ $WPUPDATE = 1 ]; then wp cli update sudo -u "$SITENAME" wp --path="$SITEDIR" core update + ErrorCheck "WP-Update_Core $SITENAME" sudo -u "$SITENAME" wp --path="$SITEDIR" plugin update --all + ErrorCheck "WP-Update_Plugin $SITENAME" sudo -u "$SITENAME" wp --path="$SITEDIR" theme update --all + ErrorCheck "WP-Update_Theme $SITENAME" fi if [ "$SRSYNC" = "1" ]; then - rsync -e "ssh -p$RSPORT" -a ${SITEDIR} "$REMOTEUSER"@"$REMOTESERVER":"$REMOTEPATH/$SITENAME-Rsync" + rsync -e "ssh -o PasswordAuthentication=no -p$RSPORT" -a ${SITEDIR} "$REMOTEUSER"@"$REMOTESERVER":"$REMOTEPATH/$SITENAME-Rsync" + ErrorCheck "Rsync $SITENAME" fi if [ $DOM == $DOMC ] && [ "$SRSYNCDEL" = "1" ]; then - rsync -e "ssh -p$RSPORT" --delete -a ${SITEDIR} "$REMOTEUSER"@"$REMOTESERVER":"$REMOTEPATH/$SITENAME-Rsync" + rsync -e "ssh -o PasswordAuthentication=no -p$RSPORT" --delete -a ${SITEDIR} "$REMOTEUSER"@"$REMOTESERVER":"$REMOTEPATH/$SITENAME-Rsync" + ErrorCheck "Monthly-Rsync $SITENAME" fi -unset DOMAIN SITENAME DBNAME SITEDIR SITEEF AI1 WPUPDATE NODB DBARRY SNOTAR SRSYNC SRSYNCDELL +unset DOMAIN SITENAME DBNAME SITEDIR SITEEF AI1 WPUPDATE NODB DBARRY SNOTAR SRSYNC SRSYNCDEL } #Setting static Vars and getting Configuration @@ -157,22 +200,25 @@ TODAY=$(date "+%d-%m-%Y") #Today's date like DD-MM-YY RMDATE=$(date "+%d-%m-%Y" -d "$RMDAYS days ago") #TODAY minus X days - too old files DOM=`date '+%d'` #Day of the month source "$ScriptLocation/Backup-Util.conf" +ErrorCheck "Unable to load config" 1 echo "Making backup of System" #SYSTEM run if [ ! -f "$ScriptLocation/key.bin" ] && [ $SYSBACKENC -eq 1 ] ; then echo "Encription key not found" - exit + exit 1 fi -#Taring SiteFiles files +#Taring SystemFiles SYSSENDDIR="$SENDDIR/$TODAY/System/" mkdir -p $SYSSENDDIR if [ $SYSBACKENC -eq 1 ] ; then tar -zcf - $SYSTEMFILES | openssl enc -e -aes256 -pass file:"$ScriptLocation"/key.bin -out /"$SYSSENDDIR"/$(hostname -s)-Files.tar.gz + ErrorCheck "SystemFiles-ENC" cp "$ScriptLocation"/key.bin.enc /"$SYSSENDDIR"/$(hostname -s)-Files.key.enc else tar -zcf /"$SYSSENDDIR"/$(hostname -s)-Files.tar.gz $SYSTEMFILES + ErrorCheck "SystemFiles" fi @@ -180,18 +226,20 @@ echo "Sending files to remote server" if [ $BACKUPSERVICE = ftp ]; then #Uploading and remove first backup on FTP lftp -c "open -u ${REMOTEUSER},${FTPPW} ftp://${REMOTESERVER}:${REMOTEPORT}; mirror -p -O ${REMOTEPATH} -R -F ${SENDDIR}/*; rm -rf ${REMOTEPATH}/${RMDATE}" - + ErrorCheck "FTP-Upload" #Checking and running monthly backup to FTP if [ $DOM == $DOMC ]; then - lftp -c "open -u ${REMOTEUSER},${FTPPW} ftp://${REMOTESERVER}:${REMOTEPORT}; rm -rf ${REMOTEPATH}/Monthly/; mkdir -p ${REMOTEPATH}/Monthly/; mirror -p -O /${REMOTEPATH}/Monthly/ -R -F ${SENDDIR}/${TODAY}/*" + lftp -c "open -u ${REMOTEUSER},${FTPPW} ftp://${REMOTESERVER}:${REMOTEPORT}; rm -rf ${REMOTEPATH}/Monthly/; mkdir -p ${REMOTEPATH}/Monthly; mirror -p -O /${REMOTEPATH}/Monthly/ -R -F ${SENDDIR}/${TODAY}/*" + ErrorCheck "Monthly FTP-Upload" fi elif [ $BACKUPSERVICE = sftp ]; then #Uploading and remove first backup on SFTP lftp -c "open -u ${REMOTEUSER}, sftp://${REMOTESERVER}:${REMOTEPORT}; mirror -p -O ${REMOTEPATH} -R -F ${SENDDIR}/*; rm -rf ${REMOTEPATH}/${RMDATE}" - + ErrorCheck "SFTP-Upload" #Checking and running monthly backup to SFTP if [ $DOM == $DOMC ]; then - lftp -c "open -u ${REMOTEUSER}, sftp://${REMOTESERVER}:${REMOTEPORT}; rm -rf ${REMOTEPATH}/Monthly/; mkdir -p ${REMOTEPATH}/Monthly/; mirror -p -O ${REMOTEPATH}/Monthly/ -R -F ${SENDDIR}/${TODAY}/*" + lftp -c "open -u ${REMOTEUSER}, sftp://${REMOTESERVER}:${REMOTEPORT}; rm -rf ${REMOTEPATH}/Monthly/; mkdir -p ${REMOTEPATH}/Monthly; mirror -p -O ${REMOTEPATH}/Monthly/ -R -F ${SENDDIR}/${TODAY}/*" + ErrorCheck "Monthly SFTP-Upload" fi fi @@ -204,3 +252,9 @@ rm -r "$SENDDIR" && rm -r "$TMPDIR" if test -f "$ScriptLocation/Post-backup-hook.sh"; then source "$ScriptLocation/Post-backup-hook.sh" fi + +#if error occurs then set exit code to 1 +if [ $Errored == True ] ; then + SendErrorMSG + exit 1 +fi \ No newline at end of file diff --git a/conf.sh b/conf.sh index a727b9e..13e2c5e 100644 --- a/conf.sh +++ b/conf.sh @@ -7,7 +7,7 @@ mbranch=master sed -i -e '$a set ssl:verify-certificate no' /etc/lftp.conf sed -i -e '$a set sftp:auto-confirm yes' /etc/lftp.conf - +echo "set cmd:fail-exit true " >> /etc/lftp.conf ############## # wp-cli # diff --git a/config/Backup-Util/Backup-Util.unconfigured b/config/Backup-Util/Backup-Util.unconfigured index 6550507..c723f71 100644 --- a/config/Backup-Util/Backup-Util.unconfigured +++ b/config/Backup-Util/Backup-Util.unconfigured @@ -1,4 +1,10 @@ ##General Configuration +#Error reporting +##Command for sending error messages +## Comment out when not in use, the error message as the argument +#ErrorCMD= + +#Core RMDAYS=14 #Days until first backup gets removed DOMC=01 #Day of month for monthly backups SYSTEMFILES="/etc/nginx/ /etc/apache2/ /etc/php/ /etc/mysql/ /etc/crontab /opt/" #Folders and files that will be backed