%PDF- %PDF-
| Direktori : /proc/self/root/etc/ansible/roles/web/library/ |
| Current File : //proc/self/root/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