## --------------------------- ## ## - - ## ## - !! DON'T CHANGE THIS !! - ## ## - - ## ## --------------------------- ## destHost=localhost ## - where to store backuped data ## - script_backup_dir=$backup_base_dir/$srcHost backup_archiv_dir=$script_backup_dir/archive backup_mirror_dir=$script_backup_dir/mirror ## - where to find backup scripts ## - script_dir=$hosts_base_dir/scripts ## - All backuped directories will be written to that file, to ## - avoid multiple execution. ## - dirs_backup_done="$script_backup_dir/backup_dirs.lst" export destHost script_backup_dir backup_archiv_dir backup_mirror_dir script_dir dirs_backup_done # # ------------------ Ende Variable ------------------ # # --------------------------------------------------- # ## - Works even if "ssh_hopping" is not set ## - if [ "X$ssh_hopping" = "X" ] ; then ssh_hopping=false fi ## - Works even if "ssh_tunnel" is not set ## - if [ "X$ssh_tunnel" = "X" ] ; then ssh_tunnel=false fi if ! $ssh_hopping && ! $ssh_tunnel ; then _via_ssh_tunnel=false export _via_ssh_tunnel if [ "$srcHost" = "localhost" -a "$destHost" = "localhost" ] ; then progArgs="$rsync_progArgs -a -p --delete" else progArgs="$rsync_progArgs -a -p -e ssh --delete" fi else ## - create ssh-tunnel localhost -> $hop_host -> $target_host ## - progArgs="-a -p -e ssh --delete" target_host=$srcHost srcHost=localhost _via_ssh_tunnel=true export _via_ssh_tunnel ## - establish ssh tunnel ## - if $ssh_hopping ; then _ssh_keyfile_arg="" if [ "X$ssh_keyfile" != "X" ]; then _ssh_keyfile_arg=" -i $ssh_keyfile" fi ## - delete existing ssh tunnels ## - tunnel_pid_old=`ps x | grep -e "$local_port:[^:]*:$target_port" | grep -v grep | awk '{print$1}'` if [ -n "$tunnel_pid_old" ]; then kill $tunnel_pid_old fi $ssh -fN -p $hop_host_port $_ssh_keyfile_arg \ -l $ssh_user \ -L $local_port:$target_host:$target_port \ $ssh_hop_host 2> /dev/null tunnel_pid=`ps x | grep -e "$local_port:$target_host:$target_port" | grep -v grep | awk '{print$1}'` else if [ "X$ssh_tunnel_target_port" = "X" ]; then ssh_tunnel_target_port=22 fi _ssh_keyfile_arg="" if [ "X$ssh_tunnel_key_file" != "X" ]; then _ssh_keyfile_arg="-i $ssh_tunnel_key_file" fi ## - delete existing ssh tunnels ## - tunnel_pid_old=`ps x | grep -e "$ssh_tunnel_local_port:$target_host:$ssh_tunnel_target_port" | grep -v grep | awk '{print$1}'` if [ -n "$tunnel_pid_old" ]; then kill $tunnel_pid_old fi $ssh -fN -p $ssh_tunnel_target_port $_ssh_keyfile_arg \ -l $ssh_user \ -L $ssh_tunnel_local_port:$target_host:$ssh_tunnel_target_port \ $target_host 2> /dev/null tunnel_pid=`ps x | grep -e "$ssh_tunnel_local_port:$target_host:$ssh_tunnel_target_port" | grep -v grep | awk '{print$1}'` fi fi logArgs="--log-format" formats="" backup_dirs="" for dir in $dir_backup ; do backup_dirs="$backup_dirs $dir" done found=true if [ "X$backup_dirs" = "X" ]; then found=false fi if [ "$found" = "true" -o "$pgsql_backup" = "true" -o "$mysql_backup" = "true" -o "$disksetting_backup" = "true" ] ; then begin_h=`date +%H` begin_m=`date +%M` backup_date=`date +"%d.%m.%Y"` backup_begin_timestamp=`date +"%s"` if $_via_ssh_tunnel ; then echolog "\nBegin saving host \"$target_host\" : $backup_date ( ${begin_h}:${begin_m} h )\n" else echolog "\nBegin saving host \"$srcHost\" : $backup_date ( ${begin_h}:${begin_m} h )\n" fi if ! $found; then echolog "[ Notice ]: No directories for backup given..\n" fi ## - BACKUP .. ## - ## - we want run the scripts in a subshell, so we export needed environment ## - export srcHost progArgs logArgs formats backup_dirs if $ARCHIVE ;then echolog "\nGoing to handle archives.. ( `$date +%H`:`$date +%M` h )" _done=false if [ ! -d $backup_archiv_dir ]; then mkdir -p $backup_archiv_dir; fi ## - remove backups older then $days ## - archive_dirs=`find $backup_archiv_dir -maxdepth 1 -mindepth 1 -type d -name "Backup_*"` _today=`date --date "now" +"%Y-%m-%d"` _timestamp_today=`date --date "$_today" "+%s"` for _dir in $archive_dirs ; do _bakup_day=`cat $_dir/BACKUP-DATE` _backup_timestamp=`date --date "$_bakup_day" +"%s"` _days=$(echo "scale=0;($_timestamp_today-$_backup_timestamp)/86400" | bc) if [ $_days -gt $days ]; then echolog "\n\tRemoving backup from $_bakup_day.." ## - begin timestamp ## - b_timestamp=`$date +"%s"` rm -rf $_dir retval=$? ## - end timestamp ## - e_timestamp=`$date +"%s"` ## - determin duration ## - _time=`expr $e_timestamp - $b_timestamp` t_h=`expr $_time / 60 / 60` t_rest_h=`expr $_time - $t_h \\* 60 \\* 60` t_m=`expr $t_rest_h / 60` t_s=`expr $t_rest_h - $t_m \\* 60` duration="" if [ $t_h -gt 0 ]; then duration="$t_h h : $t_m min : $t_s sec" elif [ $t_m -gt 0 ];then duration="$t_m min : $t_s sec" else duration="$t_s sec" fi if [ ! "$retval" = 0 ]; then echo -e "\t[ Error ]: Removing backup from $_bakup_day failed" else echolog "\t--- Backup from $_bakup_day successfully removed.. [ $duration ]" fi fi _done=true done ## - Archive last backup.. ## - if [ -f $backup_mirror_dir/BACKUP-DATE ]; then _last_backup_date=`head -n1 $backup_mirror_dir/BACKUP-DATE` if [ ! -d $backup_archiv_dir/Backup_$_last_backup_date ] ; then echolog "\n\tArchiving (last) backup from $_last_backup_date.. ( `$date +%H`:`$date +%M` h )" ## - begin timestamp ## - b_timestamp=`$date +"%s"` cp -ral $backup_mirror_dir $backup_archiv_dir/Backup_$_last_backup_date ## - end timestamp ## - e_timestamp=`$date +"%s"` ## - determin duration ## - _time=`expr $e_timestamp - $b_timestamp` t_h=`expr $_time / 60 / 60` t_rest_h=`expr $_time - $t_h \\* 60 \\* 60` t_m=`expr $t_rest_h / 60` t_s=`expr $t_rest_h - $t_m \\* 60` duration="" if [ $t_h -gt 0 ]; then duration="$t_h h : $t_m min : $t_s sec" elif [ $t_m -gt 0 ];then duration="$t_m min : $t_s sec" else duration="$t_s sec" fi if [ ! "$?" = 0 ]; then echo -e "\t[ Error ]: Archiving backup from $_last_backup_date failed" else echolog "\t--- Backup from $_last_backup_date successfully archived.. [ $duration ]" fi fi _done=true fi if ! $_done ; then echolog "\n\tNothing to do. - No last backup found, no backup older then $days days found." fi echolog "" fi if $disksetting_backup ; then echolog "\nGoing to backup disk settings.. ( `$date +%H`:`$date +%M` h )" $script_dir/disksettings_backup.sh fi if $svn_backup;then echolog "\nGoing to backup svn repositories.. ( `$date +%H`:`$date +%M` h )" export svn_source_base_path svn_gzip $script_dir/svn_backup.sh fi if $mysql_backup ;then echolog "\nGoing to backup mysql databases.. ( `$date +%H`:`$date +%M` h )" export mysql_user mysql_password mysql_credential_args mysql_gzip $script_dir/mysql_backup.sh ## - !! if $restart_apache ;then $ssh ${ssh_user}@$srcHost "sudo /etc/init.d/apache2 restart" fi fi if $pgsql_backup;then echolog "\nGoing to backup postgres databases.. ( `$date +%H`:`$date +%M` h )" export pgsql_user pgsql_gzip $script_dir/pgsql_backup.sh fi echolog "\nGoing to backup directories.. ( `$date +%H`:`$date +%M` h )" _done=false for dir in $dir_backup ; do echolog "\n\tDirectory $dir" backup_dir=$dir $script_dir/dir_backup.sh _done=true done if ! $_done ; then echo -e "\t[ Warning ]: No directory for backup selected !!" fi if $mount_netdir; then echolog "\nGoing to backup network directories.. ( `$date +%H`:`$date +%M` h )" for dir in $net_mounted_dir_backup ; do echolog "\n\tBackup network directory $dir" export mount_netdir backup_dir=$dir $script_dir/net_mounted_dir_backup.sh done fi end_h=`$date +%H` end_m=`$date +%M` backup_date=`$date +"%d.%m.%Y"` backup_end_timestamp=`date +"%s"` backup_time=`expr $backup_end_timestamp - $backup_begin_timestamp` backup_h=`expr $backup_time / 60 / 60` backup_rest_h=`expr $backup_time - $backup_h \\* 60 \\* 60` backup_m=`expr $backup_rest_h / 60` backup_s=`expr $backup_rest_h - $backup_m \\* 60` if [ $backup_m -lt 10 ] ;then backup_m="0$backup_m" fi if [ $backup_s -lt 10 ] ;then backup_s="0$backup_s" fi rm -f $dirs_backup_done if $_via_ssh_tunnel ; then echolog "\nEnd saving host \"$target_host\" : $backup_date ( ${end_h}:${end_m} h ) - duration: ${backup_h} h :${backup_m} min : ${backup_s} sec\n\n" else echolog "\nEnd saving host \"$srcHost\" : $backup_date ( ${end_h}:${end_m} h ) - duration: ${backup_h} h :${backup_m} min : ${backup_s} sec\n\n" fi ## - write duration time (a little bit formatted) to logfile of durations ## - ## - determin duration ## - duration="" if [ $backup_h -gt 0 ]; then duration="$backup_h h : $backup_m min : $t_s sec" elif [ $backup_m -gt 0 ];then duration="$backup_m min : $backup_s sec" else duration="$backup_s sec" fi if $_via_ssh_tunnel ; then _host=$target_host else _host=$srcHost fi _tmp_string="${_host}${duration}" _strlen=${#_tmp_string} _count_blank=`expr $right_tabstop - $_strlen` echo -n -e " $_host:" >> $logDuration _str_blanks="" while [ $_count_blank -gt 1 ]; do _str_blanks="$_str_blanks " _count_blank=`expr $_count_blank - 1` done echo -n "$_str_blanks" >> $logDuration echo -n " " >> $logDuration echo -n -e "$duration\n" >> $logDuration ## - Set backup date ## - ## - Notice!! ## - We ave to remove olf file and set a new one, because we are ## - working with hard links ## - [ -f $backup_mirror_dir/BACKUP-DATE ] && rm -f $backup_mirror_dir/BACKUP-DATE [ -d $backup_mirror_dir ] && \ echo `date --date "now" +"%Y-%m-%d"` > $backup_mirror_dir/BACKUP-DATE else echolog "\n[WARNING HOST \"$srcHost\"]: Nothing was marked for backup !!\n" fi if $_via_ssh_tunnel ; then kill $tunnel_pid fi