LINUX.ORG.RU

Сообщения Nine-tailed

 

systemd запуск скрипта по таймеру, проблема с выводом в файл

Форум — General

При запуске скрипта делающего бэкап по таймеру в systemd столкнулся с такой проблемой, часть вывода не попадает в лог файл. При этом если запустить скрипт в ручную все ок, если делать запуск скрипта из cron, то тоже, но хочется понять почему в systemd работает не так как я ожидал. Опыта в этом дел мало, скрипт написан по подобию. Лог чаще всего обрывается перед выводом массива REPORT, хотя периодически его все же выводит.


#!/bin/bash

## Задание переменных окружения
LOG="/var/log/borg/backup.log"
export BORG_REPO="/var/backups/borg"
export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes

info() { printf "%s %s\n" "$( date )" "$*" >&2; }
trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM

# Вывод в файл журнала
exec > >(tee -ai ${LOG})
exec 2>&1

REPORT=()

if [ $(id -u) != 0 ]; then echo "You should run this script as root"; exit; fi

echo "****************************Starting backup***********************************"

# Дамп базы данных
info "Dump databases"
mysqldump -u seafile -pomee2Poh -c ccnet_db   > /var/backups/tmp/sqldump/ccnet_db.sql
dump_ccnet_exit=$?
mysqldump -u seafile -pomee2Poh -c seafile_db > /var/backups/tmp/sqldump/seafile_db.sql
dump_seafile_exit=$?
mysqldump -u seafile -pomee2Poh -c  seahub_db  > /var/backups/tmp/sqldump/seahub_db.sql
dump_seahub_exit=$?

# Передача файлов в репозиторий.
info "Transfer files ..."
borg create -v --stats --compression lz4             \
    ::'{hostname}-{now:%Y-%m-%d_%H:%M:%S}'           \
    /opt/seafile                                     \
    /mnt/s/seafile-data                              \
    /var/backups/tmp

backup_exit=$?

info "Pruning repository"
# Сколько и каких версий резервных копий хранить
borg prune -v  --prefix '{hostname}-'             \
    --keep-hourly=9                               \
    --keep-daily=14                               \
    --keep-weekly=4                               \
    --keep-monthly=3

prune_exit=$?

# Результат дампа баз данных
if [ ${dump_ccnet_exit} -ne 0 ] ; then
    REPORT+=("Dump ccnet_db failed with exit code ${dump_ccnet_exit}")
elif [ ${dump_seafile_exit} -ne 0 ] ; then
    REPORT+=("Dump seafile_db failed with exit code ${dump_seafile_exit}")
elif [ ${dump_seahub_exit} -ne 0 ] ; then
    REPORT+=("Dump seahub_db failed with exit code ${dump_seahub_exit}")
else
    REPORT+=("Dump finished - ok")
fi

# Результат бэкапа
if [ ${backup_exit} -eq 1 ]; then
    REPORT+=("Backup finished with a warning code ${backup_exit}")
elif [ ${backup_exit} -ne 0 ]; then
    REPORT+=("Backup finished with an error code ${backup_exit}")
else
    REPORT+=("Backup finished - ok")
fi

# Результат очистки бэкапа
if [ ${prune_exit} -eq 1 ]; then
    REPORT+=("Prune finished with a warning code ${prune_exit}")
elif [ ${prune_exit} -ne 0 ]; then
    REPORT+=("Prune finished with an error ${prune_exit}")
else
    REPORT+=("Prune finished - ok")
fi

df -hl | grep --color=never /dev/sdc
borg list $BORG_REPO
printf '%s\n' "${REPORT[@]}"

# Статус выполнения скрипта большее из значений статусов бэкапа и очистки
global_exit=$((backup_exit + prune_exit + dump_ccnet_exit + dump_seafile_exit + dump_seahub_exit))

if [ ${global_exit} -ne 0 ] ; then 
    printf '%s\n' "${REPORT[@]}" | mail -s "Seafile backup" mail@ya.ru
fi

echo -e "\n\n"

exit ${global_exit}

 , ,

Nine-tailed
()

RSS подписка на новые темы