Linux 中是否有一个程序可以执行命令,如果失败则发送电子邮件?

Linux 中是否有一个程序可以执行命令,如果失败则发送电子邮件?

我有一个由 С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!)我决定,从长远来看,修复答案比让它处于更容易引起混乱的状态要好。

答案3

您始终可以通过添加以下方法使用:

[电子邮件保护]

在您的 cron 中,您将收到通知。我试过这个,它一直对我有效。

相关内容