У меня есть скрипт резервного копирования, который запускается как 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 будет выполняться в зависимости от успешного завершения всех трех команд или неудачного завершения любой из трех команд в этой строке.