#Check for Backup-Util config file ScriptLocation="`dirname \"$0\"`" if [ ! -f "$ScriptLocation/Backup-Util.conf" ]; then echo "Config file does not exist." echo "Expected config location: $ScriptLocation/Backup-Util.conf" echo "Exiting" exit fi function SiteBackup () { WPUPDATE=0 AI1=0 SITEBACKENC=0 TEMP=`getopt -a -o d: -l sn:,db:,sd:,ext-files:,ai1,wpupdate,nodb,snotar,srsync,srsyncdel,tarenc -- "$@"` eval set -- "$TEMP" while true ; do case "$1" in -d ) DOMAIN=$2 shift 2 ;; --sn ) SITENAME=$2 shift 2 ;; --db ) DBNAME=$2 shift 2 ;; --sd ) SITEDIR=$2 shift 2 ;; --ext-files ) SITEEF=$2 shift 2 ;; --ai1 ) AI1=1 shift 1 ;; --wpupdate ) WPUPDATE=1 shift 1 ;; --nodb ) NODB=1 shift 1 ;; --snotar ) SNOTAR=1 shift 1 ;; --srsync ) SRSYNC=1 shift 1 ;; --srsyncdel ) SRSYNCDEL=1 shift 1 ;; --tarenc ) SITEBACKENC=1 shift 1 ;; --ext-files ) SITEEF=$2 shift 2 ;; *) break ;; esac done; DBARRY=($DBNAME) echo "Making backup of $SITENAME" if [ ! -f "$ScriptLocation/key.bin" ] && [ $SITEBACKENC -eq 1 ] ; then echo "Encription key not found" exit fi ##SITE Run #creating folder SITESENDDIR="$SENDDIR/$TODAY/$SITENAME/" mkdir -p $SITESENDDIR #Creating AI1M file if [ "$AI1" = "1" ]; then sudo -u "$SITENAME" wp --path="$SITEDIR" plugin update all-in-one-wp-migration-unlimited-extension sudo -u "$SITENAME" wp --path="$SITEDIR" plugin update all-in-one-wp-migration 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 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 fi rm -f "$SITEDIR"/wp-content/ai1wm-backups/*.wpress fi #Dumping DataBase(es) if [ "$NODB" != "1" ]; then for i in "${DBARRY[@]}" do mysqldump -u "$DBUSER" "$i" --password="$DBPASS" --default-character-set=utf8 > "$TMPDIR"/"$SITENAME"-"$i".sql 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 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 rm -f /"$TMPDIR"/*.sql fi #Taronmogelijking 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 else tar -zcf /"$SITESENDDIR"/"$SITENAME"-Files.tar.gz $SITEDIR $SITEEF fi fi #Running WP Update if [ $WPUPDATE = 1 ]; then wp cli update sudo -u "$SITENAME" wp --path="$SITEDIR" core update sudo -u "$SITENAME" wp --path="$SITEDIR" plugin update --all sudo -u "$SITENAME" wp --path="$SITEDIR" theme update --all fi if [ "$SRSYNC" = "1" ]; then rsync -e "ssh -p$RSPORT" -a ${SITEDIR} "$REMOTEUSER"@"$REMOTESERVER":"$REMOTEPATH/$SITENAME-Rsync" fi if [ $DOM == $DOMC ] && [ "$SRSYNCDEL" = "1" ]; then rsync -e "ssh -p$RSPORT" --delete -a ${SITEDIR} "$REMOTEUSER"@"$REMOTESERVER":"$REMOTEPATH/$SITENAME-Rsync" fi unset DOMAIN SITENAME DBNAME SITEDIR SITEEF AI1 WPUPDATE NODB DBARRY SNOTAR SRSYNC SRSYNCDELL } #Setting static Vars and getting Configuration RMDAYS=$(sed -n '/RMDAYS/p' "$ScriptLocation/Backup-Util.conf" | sed -n 's/RMDAYS=//p' | head -n 1 | grep -o -E '[0-9]+') LFTP=/usr/bin/lftp #Path to binary TMPDIR=$(mktemp -d) #Your archives are here SENDDIR=$(mktemp -d) #Sends everything in this folder to ftp TODAY=$(date "+%d-%m-%Y") #Today's date like DD-MM-YYYY 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" echo "Making backup of System" #SYSTEM run if [ ! -f "$ScriptLocation/key.bin" ] && [ $SYSBACKENC -eq 1 ] ; then echo "Encription key not found" exit fi #Taring SiteFiles files 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 cp "$ScriptLocation"/key.bin.enc /"$SYSSENDDIR"/$(hostname -s)-Files.key.enc else tar -zcf /"$SYSSENDDIR"/$(hostname -s)-Files.tar.gz $SYSTEMFILES fi 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}" #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}/*" 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}" #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}/*" fi fi #Deletes Temp Folder echo "Clean UP" rm -r "$SENDDIR" && rm -r "$TMPDIR" #Check for after Backup hook script if test -f "$ScriptLocation/Post-backup-hook.sh"; then source "$ScriptLocation/Post-backup-hook.sh" fi