我正在编写一个shell脚本,用于创建完成所有任务的日志文件。在脚本的最后,它创建一个tar文件并重新启动服务。
如果tar进程失败或者服务没有重新启动,我希望脚本发送电子邮件。我不知道如何检查tar和服务是否通过/失败。
以下是shell脚本的示例,但未检查tar或服务是否已完成...
#!/bin/bash
# Shutdown service
service $SERVICE stop
# Task 1
command > some1.log
# Task 2
command > some2.log
# Task 3
command > some3.log
# Compress Tar file
tar -czf logfiles.tar.gz *.log
# Start service
service $SERVICE start
# mail if failed
mail -s "Task failed" | user@domain.com << "the task failed"
更新:脚本不应该中止,因为如果任何先前任务失败,我希望服务再次尝试启动。
答案 0 :(得分:6)
您可以查看每个步骤生成的exit status,并发送任何退出状态的邮件会引发一个标记。
# Compress Tar file
tar -czf logfiles.tar.gz *.log
TAR_EXIT_STATUS=$?
# Start service
service $SERVICE start
SERVICE_EXIT_STATUS=$?
# mail if failed
if [ $TAR_EXIT_STATUS -ne 0 ] || [ $SERVICE_EXIT_STATUS -ne 0 ];then
mail -s "Task failed" | user@domain.com << "the task failed"
fi;
答案 1 :(得分:1)
这是一个使用函数的简单解决方案:
#!/bin/bash
failfunction()
{
if [ "$1" != 0 ]
then echo "One of the commands has failed!!"
#mail -s "Task failed" | user@domain.com << "the task failed"
exit
fi
}
# Shutdown service
service $SERVICE stop
failfunction "$?"
# Task 1
command > some1.log
failfunction "$?"
# Task 2
command > some2.log
failfunction "$?"
# Task 3
command > some3.log
failfunction "$?"
# Compress Tar file
tar -czf logfiles.tar.gz *.log
failfunction "$?"
# Start service
service $SERVICE start
failfunction "$?"