%PDF- %PDF-
Direktori : /etc/ansible/roles/web/library/ |
Current File : //etc/ansible/roles/web/library/bx_backup_directory |
#!/bin/bash # create directory backup and delete directory # directory - path to directory that need backup # backup - path where backup is saved ( default: dirname directory) # delete - yes|no - delete or not initial directory # archive - gzip|bzip (gzip - default) # backup_file- path to backup file (create file name auto or user define path) # Carefully! Ansible already provides values in quotes #set -e DEBUG=0 # save debug information LOGDIR=/opt/webdir/logs [[ ! -d $LOGDIR ]] && mkdir -m 750 $LOGDIR TMPDIR=/tmp [[ -d /dev/shm ]] && TMPDIR=/dev/shm LOGFILE=$TMP_DIR/bx_backup_directory_$$.log TMPFILE=$TMPDIR/bx_backup_directory_$$ debug(){ mess=$1 [[ $DEBUG -gt 0 ]] && echo "$(date +%s) $mess" >> $LOGFILE } error_message(){ mess=$1 debug "$mess" echo "{\"changed\":false,\"failed\":true,\"msg\":\"$mess\"}" rm -f $TMPFILE exit 1 } changed_message(){ mess=$1 file=$2 debug "$mess" echo "{\"changed\":true,\"msg\":\"$mess\",\"archive\":\"$file\"}" rm -f $TMPFILE exit 0 } notchanged_message(){ mess=$1 debug "$mess" echo "{\"changed\":false,\"msg\":\"$mess\"}" rm -f $TMPFILE exit 0 } # test mandatory option and print error if not exists test_variables() { # test variables [[ -z "$directory" ]] && error_message "option directory= is mandatory for the plugin" [[ -z "$backup" ]] && backup=$(dirname "$directory") [[ -z "$delete" ]] && delete=no [[ -z "$archive" ]] && archive=gzip debug "directory=$directory backup=$backup delete=$delete archive=$archive" if [[ ! -d "$directory" ]]; then notchanged_message "directory=$directory is not exist in the system" fi # test if we can remove ( only direct path in /home/bitrix ) if [[ $(echo "$directory" | grep -v '\.\.' | grep -c '^/home/bitrix/\(www\|ext_www\)' ) -eq 0 ]]; then notchanged_message "plugin cannot working with directory=$directory" fi } # create backup for directory create_backup() { date_mark=$(date +%Y%m%d%H%M%S) util_mark="bx_backup" tar_opt='czf' tar_file=$backup/${date_mark}_${util_mark}_$(basename $directory).tar.gz if [[ "$archive" == "bzip" ]]; then tar_opt='cjf' tar_file=$backup/${date_mark}_${util_mark}_$(basename $directory).tar.bz2 elif [[ "$archive" == "tar" ]]; then tar_opt="cf" tar_file=$backup/${date_mark}_${util_mark}_$(basename $directory).tar fi if [[ -n "$backup_file" ]]; then tar_file=$backup_file fi base_directory=$(dirname "$directory") name_directory=$(basename "$directory") if [[ -f "$tar_file" ]]; then rm -f $tar_file fi tar $tar_opt "$tar_file" -C $base_directory "$name_directory" >> $TMPFILE 2>$TMPFILE if [[ $? -gt 0 ]]; then error_message "command tar $tar_opt on directory=$directory return error: $(tail -n 1 $TMPFILE)" fi if [[ "$delete" == "yes" ]]; then rm -rf $directory changed_message "create backup file=$tar_file and deleted directory=$directory" "$tar_file" else changed_message "create backup file=$tar_file" "$tar_file" fi } # get options from file source ${1} test_variables create_backup