我的设置包括一个通过 exim 命令行向本地用户发送邮件的脚本。该脚本被称为 root(现实当然更复杂,但这似乎是一个最小的工作示例)。
/home/jens/send_mail:
#!/bin/sh
cat /home/jens/testmail | /usr/bin/exim -bm jens
从 root shell 运行此脚本效果很好。邮件已顺利投递。
现在我尝试自动化此脚本并从 systemd 服务调用它:
/etc/systemd/system/send_mail.service:
[Unit]
Description=Send mail to jens
[Service]
Type=oneshot
ExecStart=/home/jens/send_mail
[Install]
WantedBy=multi-user.target
运行systemctl start send_mail.service
不会传送邮件,而是将其放入 exim 队列中以供稍后传送。在我的真实设置中,我发现线路正在读取
... exim[275968]: 2020-07-16 23:09:40 1jwB8O-0019n4-Lj failed to write to main log: length=91 result=-1 errno=9 (Bad file descriptor)
... exim[275968]: write failed on panic log: length=116 result=-1 errno=9 (Bad file descriptor)
在我的日记中。据我所知,我的 root shell 没有特定于 exim 的环境变量。这种不同行为的原因可能是什么?
我在 Arch Linux 上使用 exim 4.94。请询问您是否需要更多详细信息。
答案1
send_mail
此问题似乎是由于 systemd 在执行完毕后立即终止生成的 exim 进程而导致的。
可以通过在 结束时等待适当的时间send_mail
,或者将KillMode
systemd 单元中的选项设置为process
或none
(手册建议不要这样做)来解决。
资料来源: