Bash 如果任务失败,发送电子邮件

Bash 如果任务失败,发送电子邮件,bash,shell,task,Bash,Shell,Task,我正在编写一个shell脚本,它将创建一个日志文件,记录它完成的所有任务。在脚本的最后,它创建一个tar文件并重新启动服务 如果tar进程失败或者服务没有启动,我希望脚本发送一封电子邮件。我不知道如何检查tar和服务是否通过/失败 下面是一个shell脚本示例,未检查tar或服务是否已完成 #!/bin/bash # Shutdown service service $SERVICE stop # Task 1 command > some1.log # Task 2 command

我正在编写一个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"
#/bin/bash
#关闭服务
服务$服务站
#任务1
命令>some1.log
#任务2
命令>some2.log
#任务3
命令>some3.log
#压缩Tar文件
tar-czf logfiles.tar.gz*.log
#启动服务
服务$服务启动
#如果失败,请发送邮件
邮件-s“任务失败”|user@domain.com您可以检查每个步骤生成的邮件,并发送任何退出状态引发标志的邮件

# 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;
#压缩Tar文件
tar-czf logfiles.tar.gz*.log
TAR_EXIT_STATUS=$?
#启动服务
服务$服务启动
服务\退出\状态=$?
#如果失败,请发送邮件
如果[$TAR_EXIT_STATUS-ne 0]| |[$SERVICE_EXIT_STATUS-ne 0];然后

邮件-s“任务失败”|user@domain.com下面是一个使用函数的简单解决方案:

#!/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 "$?"
#/bin/bash
失效函数()
{
如果[“$1”!=0]
然后echo“其中一个命令失败!!”
#邮件-s“任务失败”|user@domain.com一些1.log
失效函数“$?”
#任务2
命令>some2.log
失效函数“$?”
#任务3
命令>some3.log
失效函数“$?”
#压缩Tar文件
tar-czf logfiles.tar.gz*.log
失效函数“$?”
#启动服务
服务$服务启动
失效函数“$?”

如果有多个任务失败,这将产生太多的电子邮件。
退出
会阻止这一点。@user1052448,此实现与我提供的实现之间的区别是,当任何命令失败时,此实现将中止脚本,而我的将执行所有命令,并在最后检查最后两个命令中是否有一个失败。您可以应该为脚本选择所需的行为。@none抱歉,我错过了退出。@AlvaroFlañoLarrondo我不希望中止脚本-原因是,如果备份失败,我仍然希望服务尝试重新开始运行。我更新了我的问题以指定它。太棒了!这应该可以了。我假设if语句将使用服务_存在状态和目标退出状态?