diff --git a/backup_data.zsh b/backup_data.zsh index 6acfa41..a70a3a2 100755 --- a/backup_data.zsh +++ b/backup_data.zsh @@ -202,28 +202,31 @@ if [[ $work = "y" || $work = "Y" ]]; then LOGFILE="log_bak_${inc_snapshot}.log" echo "Результат работы записываю в файл $LOGFILE" - # Записать в файл список резервируемых датасетов - echo "--- $(date +'%Y.%m.%d %H:%M.%S') ---" >> "${LOGFILE}" - echo "Список резервируемых датасетов:" >> "${LOGFILE}" + # Функция для записи сообщения в файл и на экран + echo_log () { # $1 = Сообщение + echo $1 + echo $1 >> "$LOGFILE" + } + + # Записать лог список резервируемых датасетов + echo "--- $(date +'%Y.%m.%d %H:%M.%S') ---" >> "$LOGFILE" + echo "Список резервируемых датасетов:" >> "$LOGFILE" n_tasks=0 for loc_ds in ${(k)work_datasets}; do (( n_tasks++ )) - echo "$key \t ${last_loc_snaps[$loc_ds]} \t -> \t${work_datasets[$loc_ds]}" >> "${LOGFILE}" + echo "$key \t ${last_loc_snaps[$loc_ds]} \t -> \t${work_datasets[$loc_ds]}" >> "$LOGFILE" done - echo - exec 6>&1 # Saves stdout - exec >&1 >>$LOGFILE 2>&1 # Вывод на экран и в файл - - echo "--- Резервирую данные ---" + echo_log + echo_log "--- Резервирую данные ---" i_task=0 # Выполненных зачач echo $i_task > /dev/shm/backup_i_task # Сохраняем количество готовых задач в память for loc_ds bak_ds in ${(kv)work_datasets}; do TS1=$(date +%s) echo $TS1 > /dev/shm/backup_time_stamp # Сохраняем отметку о времени начала - echo " * snapshot ${loc_ds}@${inc_snapshot}" + echo_log " * snapshot ${loc_ds}@${inc_snapshot}" zfs snapshot ${loc_ds}@${inc_snapshot}; #FIXME выдаёт ошибку если мы оставили существующий снимок - echo " * Start sending ${loc_ds} at $(date +'%Y.%m.%d %H:%M.%S')" + echo_log " * Start sending ${loc_ds} at $(date +'%Y.%m.%d %H:%M.%S')" case $incremental in true) zfs send -V -i ${loc_ds}@${last_loc_snaps[$loc_ds]} ${loc_ds}@${inc_snapshot} | ssh "$backup_user@${backup_server}" zfs receive ${bak_ds}@${inc_snapshot} ;; false) zfs send -V ${loc_ds}@${inc_snapshot} | ssh "$backup_user@${backup_server}" zfs receive ${bak_ds} ;; @@ -231,11 +234,9 @@ if [[ $work = "y" || $work = "Y" ]]; then TS2=$(date +%s) (( i_task++ )) echo $i_task > /dev/shm/backup_i_task - echo "------ готово за: $(date -d@$(($TS2-$TS1)) -u '+%H:%M.%S') ------" + echo_log "--- готово за: $(date -d@$(($TS2-$TS1)) -u '+%H:%M.%S') ---" done & # Запустить резервирование в фоне - exec 1>&6 # Restore stdout. Не писать в файл лога отследивание процента - # Выводить прогресс запрашивая список запущенныйх процессов echo "" last_percent=0 @@ -269,15 +270,11 @@ if [[ $work = "y" || $work = "Y" ]]; then fi i_task=$(< /dev/shm/backup_i_task) done + # Удалить временные файлы состояний rm /dev/shm/backup_i_task rm /dev/shm/backup_time_stamp - exec >&1 >>$LOGFILE 2>&1 # Вывод на экран и в файл - echo "\n--- Все завершено за $(date -d@$(( $(date +%s) - $TS0 )) -u '+%H:%M.%S') ---" - - exec 1>&6 6>&- # Restore stdout and close file descriptor #6. - - # sed "s/\r/\n/g" "${LOGFILE}" > "${LOGFILE}" # Заменить все возвраты каретки на символы переноса лог файле + echo_log "\n--- Все завершено за $(date -d@$(( $(date +%s) - $TS0 )) -u '+%H:%M.%S') ---\n" fi