![Linux 中是否有一个程序可以执行命令,如果失败则发送电子邮件?](https://linux22.com/image/1472228/Linux%20%E4%B8%AD%E6%98%AF%E5%90%A6%E6%9C%89%E4%B8%80%E4%B8%AA%E7%A8%8B%E5%BA%8F%E5%8F%AF%E4%BB%A5%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4%EF%BC%8C%E5%A6%82%E6%9E%9C%E5%A4%B1%E8%B4%A5%E5%88%99%E5%8F%91%E9%80%81%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%EF%BC%9F.png)
我有一个由 Сron 启动的进程,如下所示:
timeout 1h /app/longprocess.sh
现在,如果出现问题,我希望通过电子邮件收到通知。想象一下:
notifyme [email protected] timeout 1h /app/longprocess.sh
如果命令以非零状态退出,则假定命令将向其发送一封电子邮件,其中包含命令的输出。有类似的东西吗notifyme
?[email protected]
答案1
/usr/sbin/sendmail
如果安装了兼容程序(例如 msmtp、ssmtp、Postfix、OpenSMTPD……),cron 已经可以发送邮件了。另请参阅:Linux/UNIX 中的“您有新邮件”消息是什么?
chronic
从更多工具可以处理“仅成功”部分:
chronic timeout 1h /app/longprocess.sh
答案2
sometask||echo Something Went Wrong! | mail -s E-MailSubject [email protected]
如果左侧命令返回非零错误代码,则 || 只会运行右侧命令。此功能内置于 shell 中(我看到这个问题带有“bash”标签),因此无需额外的外部程序来支持该功能。“mail”程序通常预装在许多操作系统上。
类似地,你可以这样做:
sometask&&echo Something Went Right! | mail -s E-MailSubject [email protected]
如果一切顺利,它只会运行右边发生的事情。(我说的“成功”具体是指“零”是左边指定的命令的返回码。)
编辑:我最初是在深夜写的,不幸的是,为了准确起见,需要更新,这就是为什么评论指出了答案的某些方面。(感谢 MariusMatutiae 和 grawity!)我决定,从长远来看,修复答案比让它处于更容易引起混乱的状态要好。