パス/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ファイルの作成に問題はないと思います。何か足りないものはありますか?
PIDFile=
設定はPIDファイルを作成しません。それは、サービス自体がやるべきことであり、過去40年間と同じです。むしろ、このオプションは既存のPIDファイル(存在する場合)を見つける場所をsystemdに指示します。 systemdは独自のcgroupにサービスを保持し、それらを追跡するためにPIDファイルを必要としないため、ほとんどの場合、それはまったく必要ありません。ただし、サービス自体のクリーンアップに失敗した場合、systemdはサービスの終了時にPIDファイルを削除します。
ドキュメント から:
このデーモンのPIDファイルを指す絶対ファイル名を取ります。このオプションの使用は、
Type=
はforking
に設定されます。 systemdは、サービスの起動後にデーモンのメインプロセスのPIDを読み取ります。 systemdは、ここで構成されたファイルに書き込みませんが、サービスがまだ存在する場合は、サービスのシャットダウン後にファイルを削除します。
残念ながら、systemdは、サービスのユニットファイルでPIDFile=
行を指定しても、fork以外のサービスのPIDファイルを作成しません。ただし、次のようなExecStartPost=
行でごまかすことができる場合があります。
ExecStartPost=/bin/sh -c 'umask 022; pgrep YOURSERVICE > /var/run/YOURSERVICE.pid'