我正在使用 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
用于邮件发送
如 中
man systemd.service
所述,systemd 对 shell 语法的支持有限,不包括“<”。所以,字符设置为“mail”命令,导致了这个错误。我想你对电子邮件最感兴趣是因为自动重启,这可能是由于服务崩溃造成的。
为此,该
OnFailure=
指令是一个更好的选择。使用它来提供以空格分隔的单元列表,这些单元在单元进入故障状态时被激活。已经有现成的解决方案来处理这个问题,比如这个,它会在服务失败时通过电子邮件向您发送服务的“状态”输出(包括一些日志输出)。
另外,考虑使用
WorkingDirectory=
指令而不是在ExecStart=
.也不清楚为什么在启动应用程序时需要“sleep 10”。