我正在使用 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”作为启动应用程序的一部分。