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