我在使用 systemd 的 CentOS 7 上運行 ASSP。我能找到的唯一預製服務文件(howtoforge.com)使用我不確定是否正確的一次性類型。更重要的是,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 腳本也執行此操作。