bugfix: вывод в файл и на экран
This commit is contained in:
parent
1024043ab2
commit
59da941114
@ -55,7 +55,7 @@ for loc_ds bak_ds in ${(kv)work_datasets}; do
|
|||||||
if [[ "$loc_snap" = "$inc_snapshot" ]]; then
|
if [[ "$loc_snap" = "$inc_snapshot" ]]; then
|
||||||
# Если последние снимки на обеих машинах совпадают
|
# Если последние снимки на обеих машинах совпадают
|
||||||
if [[ "$loc_snap" = "$bak_snap" ]]; then
|
if [[ "$loc_snap" = "$bak_snap" ]]; then
|
||||||
echo "${loc_ds}@${loc_snap} существует на обеих машинах. $loc_ds Исключено из списка"
|
echo "${loc_ds}@${loc_snap} * существует на обеих машинах. Исключено из списка резервируемых"
|
||||||
unset "work_datasets[$loc_ds]"
|
unset "work_datasets[$loc_ds]"
|
||||||
else
|
else
|
||||||
# Если на удалённой машине нет такого снимка, то предложить удалить.
|
# Если на удалённой машине нет такого снимка, то предложить удалить.
|
||||||
@ -118,20 +118,24 @@ fi
|
|||||||
|
|
||||||
if [[ $work = "y" || $work = "Y" ]]; then
|
if [[ $work = "y" || $work = "Y" ]]; then
|
||||||
TS0=$(date +%s)
|
TS0=$(date +%s)
|
||||||
LOGFILE="log_${inc_snapshot}_backup.txt"
|
LOGFILE="backup_${inc_snapshot}.log"
|
||||||
echo "Результат работы записываю в файл $LOGFILE"
|
echo "Результат работы записываю в файл $LOGFILE"
|
||||||
|
|
||||||
# Записать в файл список резервируемых датасетов
|
# Записать в файл список резервируемых датасетов
|
||||||
|
echo "--- $(date +'%Y.%m.%d %H:%M.%S') ---" >> "${LOGFILE}"
|
||||||
echo "Список резервируемых датасетов:" >> "${LOGFILE}"
|
echo "Список резервируемых датасетов:" >> "${LOGFILE}"
|
||||||
|
n_tasks=0
|
||||||
for loc_ds in ${(k)work_datasets}; do
|
for loc_ds in ${(k)work_datasets}; do
|
||||||
|
n_tasks=$((n_tasks+1))
|
||||||
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
|
||||||
exec 6>&1 # Saves stdout
|
exec 6>&1 # Saves stdout
|
||||||
exec > >(tee $LOGFILE) # stdout replaced with file
|
exec >&1 >>$LOGFILE 2>&1 # Вывод на экран и в файл
|
||||||
|
|
||||||
echo "\n--- Резервирую данные ---"
|
echo "\n--- Резервирую данные ---"
|
||||||
|
i_task=0 # Выполненных зачач
|
||||||
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 " * snapshot ${loc_ds}@${inc_snapshot}"
|
echo " * snapshot ${loc_ds}@${inc_snapshot}"
|
||||||
@ -139,21 +143,27 @@ if [[ $work = "y" || $work = "Y" ]]; then
|
|||||||
echo " * Start sending ${loc_ds} at $(date +'%Y.%m.%d %H:%M.%S')"
|
echo " * Start sending ${loc_ds} at $(date +'%Y.%m.%d %H:%M.%S')"
|
||||||
zfs send -V -i ${loc_ds}@${last_loc_snaps[$loc_ds]} ${loc_ds}@${inc_snapshot} | ssh "root@${backup_server}" zfs receive ${bak_ds}@${inc_snapshot}
|
zfs send -V -i ${loc_ds}@${last_loc_snaps[$loc_ds]} ${loc_ds}@${inc_snapshot} | ssh "root@${backup_server}" zfs receive ${bak_ds}@${inc_snapshot}
|
||||||
TS2=$(date +%s)
|
TS2=$(date +%s)
|
||||||
echo "Закончил ${loc_ds} за: $(date -d@$(($TS2-$TS1)) -u +%H:%M:%S)"
|
i_task=$((i_task+1))
|
||||||
|
echo "------ готово за: $(date -d@$(($TS2-$TS1)) -u '+%H:%M:%S') "
|
||||||
done & # Запустить резервирование в фоне
|
done & # Запустить резервирование в фоне
|
||||||
|
|
||||||
exec 1>&6 6>&-
|
exec 1>&6 # Restore stdout. Не писать в файл лога отследивание процента
|
||||||
|
|
||||||
# Выводить прогресс запрашивая список запущенныйх процессов
|
# Выводить прогресс запрашивая список запущенныйх процессов
|
||||||
while pgrep -u $USER zfs >/dev/null; do
|
|
||||||
|
while [[ $i_task != $n_tasks ]]; do
|
||||||
PROGR=$(ps -u | grep "send" | grep -v "grep" | sed -r "s/(.*) zfs: (.*)/\2/")
|
PROGR=$(ps -u | grep "send" | grep -v "grep" | sed -r "s/(.*) zfs: (.*)/\2/")
|
||||||
echo -ne "$PROGR\033[0K\r"
|
echo -ne "$PROGR"
|
||||||
sleep 60
|
dots_per_min=10
|
||||||
|
for ((i = 0; i < dots_per_min; i++)); do echo -n "."; sleep ((60 / dots_per_min)); done
|
||||||
|
echo -e "\r";
|
||||||
done
|
done
|
||||||
echo -e
|
|
||||||
exec > >(tee $LOGFILE)
|
exec >&1 >>$LOGFILE 2>&1 # Вывод на экран и в файл
|
||||||
echo "\n---Все завершено за $(date -d@$(($TS2-$TS0)) -u +%H:%M.%S) ---"
|
echo "\n--- Все завершено за $(date -d@$(($TS2-$TS0)) -u '+%H:%M.%S') ---"
|
||||||
|
|
||||||
exec 1>&6 6>&- # Restore stdout and close file descriptor #6.
|
exec 1>&6 6>&- # Restore stdout and close file descriptor #6.
|
||||||
|
|
||||||
|
# sed "s/\r/\n/g" "${LOGFILE}" > "${LOGFILE}" # Заменить все возвраты каретки на символы переноса лог файле
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user