Сценарий rsync, для не ежедневных, еженедельных и ежемесячных резервных копий с жестких ссылок


Я не смог найти хорошую реализацию с помощью rsync делать ежедневных, еженедельных и ежемесячных резервных копий с жестких ссылок в любом месте. Поэтому я написал мои собственные и теперь я ищу критика, прежде чем я установить его на рабочем сервере unRAID. Что я должен исправить?

#!/bin/bash
#
# Daily/Weekly/Monthly Backup
#
PROG_NAME=DailyWeeklyMonthlyBackup
BACKUPPOINT=/mnt/user
MOUNTPOINT=/mnt/disks/REDBackup
DAYOFWEEK_NAME=$(date +"%a")
DAYOFWEEK_NUMERAL_WEEKLY=$(date +"%u")
DAYOFWEEK_NUMERAL_MONTHLY=$(date +"%d")

logger Started -t$PROG_NAME $(date "+%m-%d-%Y %r")

if [ -d $MOUNTPOINT ]
then

    # Daily Backup START
    ############################
    rsync -a -v --delete $BACKUPPOINT/ $MOUNTPOINT/Daily/ 2>&1
    logger Daily REDBackup Completed -t$PROG_NAME $(date "+%m-%d-%Y %r")
    /usr/local/emhttp/webGui/scripts/notify -e "unRAID Server Notice" -s "Server Backup" -d "Daily REDBackup completed" -i "normal"

    # Weekly Sunday Backup START
    ############################
    if [ $DAYOFWEEK_NUMERAL_WEEKLY == 7 ]
    then
        rsync -avH --delete --link-dest=$MOUNTPOINT/Daily/ $BACKUPPOINT/ $MOUNTPOINT/Weekly/ 2>&1
        logger Weekly REDBackup Completed -t$PROG_NAME $(date "+%m-%d-%Y %r")
        /usr/local/emhttp/webGui/scripts/notify -e "unRAID Server Notice" -s "Server Backup" -d "Weekly REDBackup completed" -i "normal"
    fi

    # Monthly Backup START
    ############################
    if [ $DAYOFWEEK_NUMERAL_MONTHLY == 1 ]
    then
        rsync -avH --delete --link-dest=$MOUNTPOINT/Daily/ $BACKUPPOINT/ $MOUNTPOINT/Monthly/ 2>&1
        logger Monthly REDBackup Completed -t$PROG_NAME $(date "+%m-%d-%Y %r")
        /usr/local/emhttp/webGui/scripts/notify -e "unRAID Server Notice" -s "Server Backup" -d "Monthly REDBackup completed" -i "normal"
    fi

else

    logger REDBackup Drive Not Mounted -t$PROG_NAME $(date "+%m-%d-%Y %r")
    /usr/local/emhttp/webGui/scripts/notify -e "unRAID Server Notice" -s "Server Backup" -d "Daily REDBackup failed" -i "alert"

fi


1091
3
задан 6 марта 2018 в 11:03 Источник Поделиться
Комментарии
1 ответ

Обработка ошибок

Обработка ошибок всегда важно,
особенно при работе с чем-то настолько важным, как резервное копирование.
В частности, в результате rsync команды не проверял,
сценарий журналов "резервное копирование завершено" сообщения,
который ничего не говорит об успехе или неудаче.

Я предлагаю добавить проверку на выход статус всех rsyncкоманды,
и чтобы сообщения журнала отражают состояние успеха/неуспеха (или просто включить код выхода напрямую).

Не повторяйся

Есть некоторые повторяющиеся элементы в коде:


  • logger $period REDBackup $result -t$PROG_NAME $(date "+%m-%d-%Y %r")

  • /usr/local/emhttp/webGui/scripts/notify -e "unRAID Server Notice" -s "Server Backup" -d "$period REDBackup $result" -i "normal"

Я заменил с $period и $result детали, которые могут быть параметризованы.
Извлекая эти команды для вспомогательных функций может значительно уменьшить дублирование логики и улучшения читабельности.

Слово о цитировании

Рекомендуется дважды цитировать все переменные, используемые как аргументы командной строки.
Например вместо этого:


rsync -a -v --delete $BACKUPPOINT/ $MOUNTPOINT/Daily/ 2>&1

Это будет безопаснее писать:

rsync -a -v --delete "$BACKUPPOINT"/ "$MOUNTPOINT"/Daily/ 2>&1

Может быть, вы знаете, что эти переменные всегда будут в безопасности.
Но это хорошо, чтобы принять во всяком случае это простая предосторожность,
и сделать это привычкой так это автомат и вы никогда не попадетесь в ловушку непреднамеренного слово расщепления или подстановка.

1
ответ дан 7 марта 2018 в 07:03 Источник Поделиться