#!/bin/bash ALL=$1 TIME=$(date +%F-%H-%M-%S) PASSWD=$(tr -cd '[:alnum:]' < /dev/urandom | fold -w30 | head -n1) CONF_FILE="$(dirname "$0")/backup.conf" if [ -f "$CONF_FILE" ]; then # shellcheck source=/dev/null source "$CONF_FILE" else echo "$CONF_FILE not exist." exit -1 fi if [ ! -d "$TARGET_DIR" ]; then echo "Error, directory $TARGET_DIR not found." | tee -a "$LOG_FILE" exit -1 fi ZIP="zip -P $PASSWD" if [ "$ZIP_COMPRESS" != true ]; then ZIP="zip -0 -P $PASSWD" fi # create tmp dir for archive files and dirs cd /opt || exit -1 if [ -d 'tmp' ]; then rm -r tmp fi mkdir tmp cd tmp || exit -1 # remove old backup files if [ ! "$(find "$TARGET_DIR" -name \*.zip |wc -l)" == 0 ]; then rm "$TARGET_DIR"/*.zip fi # backup files if [ -f "$TARGET_DIR/backup_files.zip" ]; then rm "$TARGET_DIR/backup_files.zip" fi echo "$(date) --> backup files: ${FILES[*]}" | tee -a "$LOG_FILE" $ZIP "backup_files.zip" "${FILES[@]}" mv "backup_files.zip" "$TARGET_DIR/backup-$TIME-backup_files.zip" # backup dirs for dir in "${DIRS[@]}" do target="${dir//\//_}" target="${target:1}" if [ -f "$TARGET_DIR/$target.zip" ]; then rm "$TARGET_DIR/$target.zip" fi if [ -d "$dir" ]; then echo "$(date) --> backup: $dir" | tee -a "$LOG_FILE" if [ "$ALL" = "all" ] || [ ! -f "$dir/exclude.lst" ]; then $ZIP -r --symlinks "$target.zip" "$dir" else $ZIP -r --symlinks "$target.zip" "$dir" -x@"$dir/exclude.lst" fi mv "$target.zip" "$TARGET_DIR/backup-$TIME-$target.zip" else echo "$(date) --> $dir not exist." | tee -a "$LOG_FILE" fi done # backup mysql if [ "$BACKUP_MYSQL" == "true" ]; then echo "$(date) --> backup: mysql" | tee -a "$LOG_FILE" mysqldump --all-databases > mysql.sql $ZIP mysql.zip mysql.sql rm mysql.sql mv "mysql.zip" "$TARGET_DIR/backup-$TIME-mysql.zip" fi # clean tmp dir cd /opt || exit -1 rm -r tmp #cp /root/Dropbox/*.zip /home/box/backup # curl -s https://www.xdty.org/mail.php -X POST -d "event=$EVENT ($TIME|$PASSWD)&name=$NAME&email=$EMAIL" & # echo $PASSWD # send email if [ "$ALL" = "all" ]; then EVENT="$EVENT(all)" fi sendemail -f "${SENDER%@*} <$SENDER>" \ -u "$EVENT event notify" \ -t "$EMAIL" \ -s "$SMTP_SERVER" \ -o tls=yes \ -xu "$SENDER" \ -xp "$SENDER_PASSWD" \ -m "$EVENT completed ($TIME|$PASSWD) at $(date +'%Y-%m-%d %H:%M:%S')"