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