diff --git a/bin/v-backup-user b/bin/v-backup-user index 38908dd1..b841bd07 100755 --- a/bin/v-backup-user +++ b/bin/v-backup-user @@ -18,6 +18,9 @@ source $VESTA/func/main.sh source $VESTA/func/domain.sh source $VESTA/func/db.sh +subj="Backup $user failed" +email=$(grep CONTACT $VESTA/data/users/admin/user.conf |cut -f 2 -d \') + #----------------------------------------------------------# # Verifications # @@ -36,6 +39,7 @@ while [ "$la" -ge "$BACKUP_LA_LIMIT" ]; do echo sleep 60 if [ "$i" -ge "15" ]; then + echo "LoadAverage $i is above threshold" | mail -s "$subj" $email echo "Error: LA is too high" log_event "$E_LA" "$EVENT" exit $E_LA @@ -53,16 +57,17 @@ start_time=$(date '+%s') # Creating temporary random directory tmpdir=$(mktemp -p $BACKUP -d) +if [ "$?" -ne 0 ]; then + echo "Can't create tmp dir $tmpdir" | mail -s "$subj" $email + echo "Error: can't create tmp dir" + log_event "$E_NOTEXIST" "$EVENT" +fi # Prinitng status echo "$(date "+%F %T") System backup for user $user" echo "TMPDIR is $tmpdir" echo -# Addding backup and vesta version -echo "1.0" > $tmpdir/backup_version -echo "$VERSION" > $tmpdir/vesta_version - # Vesta echo "-- VESTA --" vst='yes' @@ -123,7 +128,7 @@ then # Parsing unsuspeneded domains conf="$USER_DATA/web.conf" for domain in $(search_objects 'web' 'SUSPENDED' "*" 'DOMAIN'); do - check_exl=$(echo "$WEB"|grep -w $domain) + check_exl=$(echo "$WEB"|grep -w $domain) if [ -z "$check_exl" ]; then web_list="$web_list $domain" fi @@ -208,7 +213,7 @@ then # Parsing unsuspeneded domains for domain in $(search_objects 'dns' 'SUSPENDED' "*" 'DOMAIN'); do - check_exl=$(echo "$DNS"|grep -w $domain) + check_exl=$(echo "$DNS"|grep -w $domain) if [ -z "$check_exl" ]; then dns_list="$dns_list $domain" fi @@ -243,7 +248,7 @@ then # Parsing unsuspeneded domains conf="$USER_DATA/mail.conf" for domain in $(search_objects 'mail' 'SUSPENDED' "*" 'DOMAIN'); do - check_exl=$(echo "$MAIL"|grep -w $domain) + check_exl=$(echo "$MAIL"|grep -w $domain) if [ -z "$check_exl" ]; then mail_list="$mail_list $domain" fi @@ -252,7 +257,6 @@ then for domain in $mail_list; do echo -e "$(date "+%F %T") $domain" - #mkdir -p $tmpdir/mail/$domain/accounts mkdir -p $tmpdir/mail/$domain/conf mkdir -p $tmpdir/mail/$domain/vesta @@ -290,7 +294,7 @@ if [ ! -z "$DB_SYSTEM" ] && [ "$DB_SYSTEM" != 'no' ] && [ "$DB" != '*' ]; then # Parsing unsuspeneded domains for database in $(search_objects 'db' 'SUSPENDED' "*" 'DB'); do - check_exl=$(echo "$DB"|grep -w $database) + check_exl=$(echo "$DB"|grep -w $database) if [ -z "$check_exl" ]; then db_list="$db_list $database" fi @@ -379,6 +383,8 @@ local_backup(){ disk_usage=$(df $BACKUP |tail -n1 |tr ' ' '\n' |grep % |cut -f 1 -d %) if [ "$disk_usage" -ge "$BACKUP_DISK_LIMIT" ]; then + rm -rf $tmpdir + echo "Not enough disk space to run backup" | mail -s "$subj" $email echo "Error: Not enough disk space" log_event "$E_DISK" "$EVENT" exit $E_DISK @@ -417,6 +423,8 @@ ftp_backup(){ source $VESTA/conf/ftp.backup.conf if [ -z "$HOST" ] || [ -z "$USERNAME" ] || [ -z "$PASSWORD" ] ||\ [ -z "$BPATH" ]; then + rm -rf $tmpdir + echo "Can't parse ftp backup configuration" | mail -s "$subj" $email echo "Error: Parsing error" log_event "$E_PARSING" "$EVENT" exit $E_PARSING @@ -432,6 +440,8 @@ ftp_backup(){ ls $ftmpdir rm $ftmpdir" if [ ! -z "$(ftpc "$command")" ] ; then + rm -rf $tmpdir + echo "Can't login to ftp://$USERNAME@$HOST" | mail -s "$subj" $email echo "Error: FTP error" log_event "$E_FTP" "$EVENT" exit $E_FTP @@ -453,12 +463,12 @@ ftp_backup(){ # Uploading backup archive if [ "$localbackup" = 'yes' ]; then cd $BACKUP - ftpc "put $user.$DATE.tar" + ftpc "put $user.$DATE.tar" else - cd $tmpdir + cd $tmpdir tar -cf $BACKUP/$user.$DATE.tar . cd $BACKUP/ - ftpc "put $user.$DATE.tar" + ftpc "put $user.$DATE.tar" rm -f $user.$DATE.tar fi echo diff --git a/func/db.sh b/func/db.sh index e68ee392..385135c2 100644 --- a/func/db.sh +++ b/func/db.sh @@ -330,6 +330,8 @@ dump_mysql_database() { host_str=$(grep "HOST='$HOST'" $VESTA/conf/mysql.conf) eval $host_str if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $PORT ]; then + rm -rf $tmpdir + echo "Can't parse mysql config" | mail -s "$subj" $email echo "Error: mysql config parsing failed" log_event "$E_PARSING" "$EVENT" exit $E_PARSING @@ -338,12 +340,21 @@ dump_mysql_database() { query='SELECT VERSION()' mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" &> /dev/null if [ '0' -ne "$?" ]; then + rm -rf $tmpdir + echo "Can't connect to mysql server $HOST" | mail -s "$subj" $email echo "Error: Connection failed" log_event "$E_DB $EVENT" exit $E_DB fi mysqldump -h $HOST -u $USER -p$PASSWORD -P$PORT -r $dump $database + if [ '0' -ne "$?" ]; then + rm -rf $tmpdir + echo "Can't dump mysql database $database" | mail -s "$subj" $email + echo "Error: dump $database failed" + log_event "$E_DB $EVENT" + exit $E_DB + fi query="SHOW GRANTS FOR '$DBUSER'@'localhost'" mysql -h $HOST -u $USER -p$PASSWORD -P $PORT -e "$query" |\ @@ -360,6 +371,8 @@ dump_pgsql_database() { eval $host_str export PGPASSWORD="$PASSWORD" if [ -z $HOST ] || [ -z $USER ] || [ -z $PASSWORD ] || [ -z $TPL ]; then + rm -rf $tmpdir + echo "Can't parse pgsql config" | mail -s "$subj" $email echo "Error: postgresql config parsing failed" log_event "$E_PARSING" "$EVENT" exit $E_PARSING @@ -368,6 +381,8 @@ dump_pgsql_database() { query='SELECT VERSION()' psql -h $HOST -U $USER -p $PORT -c "$query" &> /dev/null if [ '0' -ne "$?" ]; then + rm -rf $tmpdir + echo "Can't connect to pgsql server $HOST" | mail -s "$subj" $email echo "Error: Connection failed" log_event "$E_DB" "$EVENT" exit $E_DB @@ -376,6 +391,14 @@ dump_pgsql_database() { pg_dump -h $HOST -U $USER -p $PORT -c -d -O -x -i -f $dump $database \ 2> /dev/null + if [ '0' -ne "$?" ]; then + rm -rf $tmpdir + echo "Can't dump pgsql database $database" | mail -s "$subj" $email + echo "Error: dump $database failed" + log_event "$E_DB $EVENT" + exit $E_DB + fi + query="SELECT rolpassword FROM pg_authid WHERE rolname='$DBUSER';" md5=$(psql -h $HOST -U $USER -p $PORT -c "$query"|head -n1|cut -f 2 -d \ ) pw_str="UPDATE pg_authid SET rolpassword='$md5' WHERE rolname='$DBUSER';"