systemdユニットファイルサービスの場所を見つける

systemdユニットファイルサービスの場所を見つける

systemd ユニット ファイルが配置される場所は多数あります。サービス名だけを指定して、systemd にサービスの宣言をどこから読み取ったかを尋ねる簡単で簡単な方法はありますか?

答え1

実際の静的ファイルで定義されているユニットについては、次の場所で確認できますsystemctl status

$ systemctl status halt-local.service
● halt-local.service - /usr/sbin/halt.local Compatibility
   Loaded: loaded (/lib/systemd/system/halt-local.service; static)
   Active: inactive (dead)

しかし、ファイルによって定義されていないユニットもあります (例:systemd-cronインストール済み)。これらには、次のようにリストされる便利な場所はありませんstatus

$ systemctl status cron-jojo-0.timer
● cron-jojo-0.timer - [Cron] "*/10 * * * * ..."
   Loaded: loaded (/var/spool/cron/crontabs/jojo)
   Active: active (waiting) since Mon 2015-05-18 14:53:01 UTC; 9min ago

しかし、どちらの場合でも、このFragmentPath分野は教育を行っています。

$ systemctl show -P FragmentPath cron-daily.service
/lib/systemd/system/cron-daily.service
$ systemctl show -P FragmentPath cron-jojo-0.service
/run/systemd/generator/cron-jojo-0.service
$ systemctl show -P FragmentPath halt-local.service
/lib/systemd/system/halt-local.service

答え2

systemd ユニットを cat することができます。これにより、ファイルの場所がコメントとして表示されます。ボーナス: オーバーライドも表示されます。

systemctl cat sssd
# /lib/systemd/system/sssd.service
[Unit]
...

# /etc/systemd/system/sssd.service.d/override.conf
[Unit]
...

答え3

下の図は複数のファイルの場所を示しています

show -- 1 つ以上のユニット/ジョブまたはマネージャーのプロパティを表示します

-p --property=NAME この名前のプロパティのみを表示

$ systemctl show -p FragmentPath {accounts-daemon,ntp,sshd}
FragmentPath=/lib/systemd/system/accounts-daemon.service
FragmentPath=/lib/systemd/system/ntp.service
FragmentPath=/lib/systemd/system/ssh.service

答え4

次のように実行できます (例として nullmailer を使用)。

systemctl show nullmailer | grep FragmentPath | awk -F'=' '{print $2}'

次のようなものが生成されます。

/lib/systemd/system/nullmailer.service

次に、サービス ファイルの内容を確認するには、次のようにします。

cat $(systemctl show nullmailer | grep FragmentPath | awk -F'=' '{print $2}')

そして、次のような結果が生成されます。

[Unit]
Description=nullmailer


[Unit]
Description=Nullmailer relay-only MTA

... stuff omitted for brevity ...

[Install]
WantedBy=multi-user.target

それが役に立てば幸い。

PS. 通常、私は便宜上これらのコマンドをエイリアス ファイルに入れます。

P.PS. Joaquin が述べたように、私が使用/言及した grep|awk の組み合わせを使用する代わりに、-P フラグを使用できます。

systemctl show nullmailer -P FragmentPath

関連情報