我有一个备份脚本作为 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
第一个选项,您可以使用您喜欢的任何文本作为消息正文。第二个选项将发送带有空邮件正文的电子邮件。对于不成功的备份,对第二个电子邮件命令重复相同的更改。
出于学习目的,您应该检查 tar 文件的创建、复制和删除是否成功完成,然后再确定是否成功。要做到这一点,你可以这样做。
改变
tar -czvf $of messages
到
tar -czvf $of messages && cp $of /home/user/ && rm -rf $of
此外,通过此更改,您可以从脚本末尾删除cp $of /home/user/
和。rm -rf $of
然后,您的 if/else 将根据所有三个命令的成功完成或该字符串中三个命令中的任何一个命令的失败完成来执行。