bugfix: вывод в лог файл (не тестировано)

This commit is contained in:
root 2024-11-01 13:52:11 +03:00
parent 130fd5a9f4
commit 3120cfc2d0

View File

@ -202,28 +202,31 @@ if [[ $work = "y" || $work = "Y" ]]; then
LOGFILE="log_bak_${inc_snapshot}.log" LOGFILE="log_bak_${inc_snapshot}.log"
echo "Результат работы записываю в файл $LOGFILE" echo "Результат работы записываю в файл $LOGFILE"
# Записать в файл список резервируемых датасетов # Функция для записи сообщения в файл и на экран
echo "--- $(date +'%Y.%m.%d %H:%M.%S') ---" >> "${LOGFILE}" echo_log () { # $1 = Сообщение
echo "Список резервируемых датасетов:" >> "${LOGFILE}" echo $1
echo $1 >> "$LOGFILE"
}
# Записать лог список резервируемых датасетов
echo "--- $(date +'%Y.%m.%d %H:%M.%S') ---" >> "$LOGFILE"
echo "Список резервируемых датасетов:" >> "$LOGFILE"
n_tasks=0 n_tasks=0
for loc_ds in ${(k)work_datasets}; do for loc_ds in ${(k)work_datasets}; do
(( n_tasks++ )) (( 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 done
echo echo_log
exec 6>&1 # Saves stdout echo_log "--- Резервирую данные ---"
exec >&1 >>$LOGFILE 2>&1 # Вывод на экран и в файл
echo "--- Резервирую данные ---"
i_task=0 # Выполненных зачач i_task=0 # Выполненных зачач
echo $i_task > /dev/shm/backup_i_task # Сохраняем количество готовых задач в память echo $i_task > /dev/shm/backup_i_task # Сохраняем количество готовых задач в память
for loc_ds bak_ds in ${(kv)work_datasets}; do for loc_ds bak_ds in ${(kv)work_datasets}; do
TS1=$(date +%s) TS1=$(date +%s)
echo $TS1 > /dev/shm/backup_time_stamp # Сохраняем отметку о времени начала 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 выдаёт ошибку если мы оставили существующий снимок 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 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} ;; 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} ;; 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) TS2=$(date +%s)
(( i_task++ )) (( i_task++ ))
echo $i_task > /dev/shm/backup_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 & # Запустить резервирование в фоне done & # Запустить резервирование в фоне
exec 1>&6 # Restore stdout. Не писать в файл лога отследивание процента
# Выводить прогресс запрашивая список запущенныйх процессов # Выводить прогресс запрашивая список запущенныйх процессов
echo "" echo ""
last_percent=0 last_percent=0
@ -269,15 +270,11 @@ if [[ $work = "y" || $work = "Y" ]]; then
fi fi
i_task=$(< /dev/shm/backup_i_task) i_task=$(< /dev/shm/backup_i_task)
done done
# Удалить временные файлы состояний # Удалить временные файлы состояний
rm /dev/shm/backup_i_task rm /dev/shm/backup_i_task
rm /dev/shm/backup_time_stamp rm /dev/shm/backup_time_stamp
exec >&1 >>$LOGFILE 2>&1 # Вывод на экран и в файл echo_log "\n--- Все завершено за $(date -d@$(( $(date +%s) - $TS0 )) -u '+%H:%M.%S') ---\n"
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}" # Заменить все возвраты каретки на символы переноса лог файле
fi fi