Скрипт резервного копирования зависает

Скрипт резервного копирования зависает

У меня есть скрипт резервного копирования, который запускается как cron-задание и ежедневно создает резервную копию /var/log/messages/. Обратите внимание, что этот скрипт больше для обучения, чем для реального применения. Я добавил операторы if / else для проверки кода выхода после выполнения команды tar. Раньше скрипт работал нормально, но после добавления этой функции он завис. Код ниже:

#!/bin/bash

admin="[email protected]"
of=messages-backup-$(date +%Y%m%d).tgz

cd /var/log/

tar -czvf $of messages

if [ $? -eq 0 ]; then
  mail -s "Backup of /var/log/messages was successful!" $admin
  exit 0
else
  mail -s "Backup of /var/log/messages has failed!" $admin
  exit 1
fi

cp $of /home/user/
rm -rf $of

Выход:

[root@nidesant2 Scripts]# ./backup.sh 
messages
^C
(Interrupt -- one more to kill letter)

решение1

Изменять

mail -s "Backup of /var/log/messages was successful!" $admin

к

echo hello | mail -s "Backup of /var/log/messages was successful!" $admin

или

mail -s "Backup of /var/log/messages was successful!" $admin < /dev/null

Первый вариант, вы можете использовать любой текст, который вам нравится, для тела сообщения. Второй вариант отправит письмо с пустым телом сообщения. Повторите то же изменение для второй команды email для неудачного резервного копирования.

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

Изменять

tar -czvf $of messages

к

tar -czvf $of messages && cp $of /home/user/ && rm -rf $of

Кроме того, с этим изменением вы удалите cp $of /home/user/and rm -rf $ofиз конца скрипта.

Тогда ваш if/else будет выполняться в зависимости от успешного завершения всех трех команд или неудачного завершения любой из трех команд в этой строке.

Связанный контент