我有一个由systemd作为服务运行的关键应用程序。
它被设置为在失败后立即重新启动。
如果应用程序重新启动,如何发送电子邮件?
首先,您需要两个文件:发送邮件的可执行文件和启动可执行文件的.service文件。 对于这个例子,可执行文件只是一个使用sendmail的shell脚本:
/usr/local/bin/systemd-email: #!/bin/bash /usr/bin/sendmail -t <<ERRMAIL To: $1 From: systemd <root@$HOSTNAME> Subject: $2 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 $(systemctl status --full "$2") ERRMAIL
无论使用哪种可执行文件,它都可能至less需要两个参数,如下所示:发送到的地址和获取状态的单元文件。 我们创build的.service会传递这些参数:
/etc/systemd/system/[email protected]: [Unit] Description=status email for %i to user [Service] Type=oneshot ExecStart=/usr/local/bin/systemd-email address %i User=nobody Group=systemd-journal
用户是通过电子邮件发送的用户, 地址是用户的电子邮件地址。 尽pipe接收者是硬编码的,但是要报告的单元文件作为实例parameter passing,所以这一个服务可以为许多其他单元发送电子邮件。 此时,您可以启动[email protected]来validation您是否可以收到电子邮件。
然后只需编辑您想要的电子邮件服务,并将OnFailure=status-email-user@%n.service添加到[Unit]部分。 %n将单元名称传递给模板。
来源: archlinux wiki:systemd计时器MAILTO
您可以创build一个shell脚本来检查服务状态并在服务器启动时发送电子邮件。 这个链接可能会帮助你
https://askubuntu.com/questions/814/how-to-run-scripts-on-start-up
您可以尝试使用systemd服务选项ExecStartPost。
描述在这里可用:
https://www.freedesktop.org/software/systemd/man/systemd.service.html
在服务定义文件中可以有更多的这个选项的声明。 它被一一触发。
你的系统中也会有一些例子。