我在使用 systemd 的 CentOS 7 上运行 ASSP。我能找到的唯一预制服务文件(howtoforge.com) 使用 oneshot 类型,我不确定这是否正确。更重要的是,stop 命令似乎会终止我正在运行的所有 perl 程序(所以我将其注释掉)。但现在我不确定它在关机时是否正确停止。有人可以就如何改进服务文件提出建议吗:
[Unit]
Description=AntiSpam SMTP Proxy
After=network.target
[Service]
Type=Simple
Environment=PERL5LIB=/root/perl5/lib/perl5/
ExecStartPre=-rm -f /usr/local/assp/pid
ExecStart=/usr/bin/perl /usr/local/assp/assp.pl /usr/local/assp/
ExecStopPost=-rm -f /usr/local/assp/pid
[Install]
WantedBy=multi-user.target
答案1
Type=oneshot
对于任何旨在持续运行的程序(无论是作为守护进程还是其他程序)来说,这都是没有意义的。所以你说得对。你确实找到了另一个糟糕的互联网教程(在一个以它们而臭名昭著的网站上;而且那个教程还有许多其他问题)。
通过查看 assp 的 wiki 上的示例初始化脚本,似乎该程序在前台运行,并且不会自我守护。Type=simple
(默认)适合这种服务。
ExecStop=
通常,服务不需要一行,Type=simple
因为 systemd 已经知道要停止哪个进程。只有具有不寻常停止过程的进程才需要它,但 assp 只接受信号并终止,就像任何其他进程一样。您可以省略此行。
除了这些问题之外,您还重复了一行ExecStartPre=
。您可能只需要一次。您可能还想将设置WorkingDirectory=
为您安装 assp 的目录,因为旧式 init 脚本也这样做了。