web-dev-qa-db-ja.com

SystemdドロップインがPIDファイルの作成に失敗する

パス/etc/systemd/system/systemd-machined.service.d/10-machined-pid-file.confにsystemd-machinedのドロップインがあります。 systemctl status systemd-machinedを実行すると、次の行が表示されます

Drop-In: /etc/systemd/system/systemd-machined.service.d
       └─10-machined-pid-file.conf

しかし、/ var/run /にPIDファイルがありません。これは私のドロップインに基づいています:

[Serivce]
PIDFile=/var/run/machined.pid

そのPIDファイルの作成に問題はないと思います。何か足りないものはありますか?

11

PIDFile=設定はPIDファイルを作成しません。それは、サービス自体がやるべきことであり、過去40年間と同じです。むしろ、このオプションは既存のPIDファイル(存在する場合)を見つける場所をsystemdに指示します。 systemdは独自のcgroupにサービスを保持し、それらを追跡するためにPIDファイルを必要としないため、ほとんどの場合、それはまったく必要ありません。ただし、サービス自体のクリーンアップに失敗した場合、systemdはサービスの終了時にPIDファイルを削除します。

ドキュメント から:

このデーモンのPIDファイルを指す絶対ファイル名を取ります。このオプションの使用は、Type=forkingに設定されます。 systemdは、サービスの起動後にデーモンのメインプロセスのPIDを読み取ります。 systemdは、ここで構成されたファイルに書き込みませんが、サービスがまだ存在する場合は、サービスのシャットダウン後にファイルを削除します。

19
Michael Hampton

残念ながら、systemdは、サービスのユニットファイルでPIDFile=行を指定しても、fork以外のサービスのPIDファイルを作成しません。ただし、次のようなExecStartPost=行でごまかすことができる場合があります。

ExecStartPost=/bin/sh -c 'umask 022; pgrep YOURSERVICE > /var/run/YOURSERVICE.pid'
10
Mike Gleason