私はsystemdを使用するCentOS 7でASSPを実行しています。私が見つけた唯一の既成のサービスファイルは(翻訳元) はワンショット型を使用していますが、これが正しいかどうかはわかりません。さらに重要なのは、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 にあるサンプル init スクリプトを確認すると、プログラムはフォアグラウンドで実行され、デーモン化されないようです。Type=simple
(デフォルト) は、この種のサービスに適しています。
systemd は停止するプロセスをすでに認識しているため、通常、サービスにこのExecStop=
行は必要ありませんType=simple
。通常とは異なる停止手順を実行する場合にのみ必要ですが、assp は他のプロセスと同様に、シグナルを受け入れて終了します。この行は省略できます。
これらの問題とは別に、行が重複していますExecStartPre=
。おそらく、これは 1 回だけ必要になります。古いスタイルの init スクリプトでもこれが行われていたため、 を assp をインストールしたディレクトリに設定することもできますWorkingDirectory=
。