systemd,重启后发送邮件

systemd,重启后发送邮件

我正在使用 systemd 通过以下脚本自动启动服务:(见下文)

我试图在服务启动之前发送电子邮件(注释掉的行)。

该行末尾的链接/home/vincent/wintergreen/service_files/IB_restart_email是电子邮件的内容,如此处所述在第7段中。

Unit]
Description=Manages an instance of IBController

[Service]
Type=forking
User=vincent
Group=vincent
ExecStart=/bin/bash -c "cd /opt/IBController && bash IBControllerStart.sh -inline && sleep 10"
# ExecStartPre=/usr/bin/mail -s "Restarting TWS" [email protected] < /home/vincent/wintergreen/service_files/IB_restart_email 
Environment=DISPLAY=:0.0
KillMode=control-group
TimeoutSec=0
Restart=always

[Install]
WantedBy=graphical.target

然而,这一行返回错误mail: Cannot parse address <' (while expanding <'): Malformed email address。 (打开journalctl时可以看到错误消息)

该命令直接在 shell 中使用时有效。任何人都知道如何在从 systemd 文件使用此邮件发送线路时工作?

PS:我用的是postfix邮件发送

答案1

如 中所述man systemd.service,systemd 对 shell 语法的支持有限,其中不包括“<”。因此,该字符被设置为“mail”命令,从而导致此错误。

我认为您对电子邮件最感兴趣,因为自动重新启动可能是由于服务崩溃造成的。

为此,该OnFailure=指令是一个更好的选择。使用它来提供以空格分隔的单元列表,当单元进入故障状态时,这些单元将被激活。

已经有现成的解决方案来处理这个问题,例如这个当服务失败时,它将通过电子邮件向您发送服务的“状态”输出(包括一些日志输出)。

另外,请考虑使用该WorkingDirectory=指令,而不是在ExecStart=.

还不清楚为什么需要“sleep 10”作为启动应用程序的一部分。

相关内容