web-dev-qa-db-ja.com

systemdユニット/サービスはUbuntuのどこにありますか?

グーグルしながら、それらが/ usr/lib/systemd/system /と/ etc/systemd/system /にあることを見つけ続けます。しかし、私のubuntuでは、最初のものは存在しませんし、他のものはいくつかのサービスしか持っていません

bluetooth.target.wants                      default.target.wants           hybrid-sleep.target.wants    shutdown.target.wants
dbus-org.bluez.service                      display-manager.service        multi-user.target.wants      sockets.target.wants
dbus-org.freedesktop.Avahi.service          display-manager.service.wants  network-online.target.wants  suspend.target.wants
dbus-org.freedesktop.ModemManager1.service  getty.target.wants             paths.target.wants           sysinit.target.wants
dbus-org.freedesktop.nm-dispatcher.service  graphical.target.wants         plexmediaserver.service      syslog.service
dbus-org.freedesktop.thermald.service       hibernate.target.wants         printer.target.wants         timers.target.wants

他はどこですか?

Systemctl list-unitsを実行すると、非常に多くのサービスが表示されますが、それらの場所を見つけることができません。たとえば、plexmediaserver.serviceはどこにありますか?それが他のユニットを置きたい場所だからです。

17
Guerlando OCs

パッケージが提供するサービスファイルはすべて、通常/lib/systemd/systemにあります。たとえば、 パッケージインデックスで.serviceを検索

man systemd.unit から:

/etc/systemd/system/*
/run/systemd/system/*
/lib/systemd/system/*
...

$XDG_CONFIG_HOME/systemd/user/*
$HOME/.config/systemd/user/*
/etc/systemd/user/*
$XDG_RUNTIME_DIR/systemd/user/*
/run/systemd/user/*
$XDG_DATA_HOME/systemd/user/*
$HOME/.local/share/systemd/user/*
/usr/lib/systemd/user/*

後者はユーザーセッション用です。 IIRC Ubuntu 16.04は引き続きユーザーセッションにupstartを使用するため、これらのファイルは16.04以降からのみ適用可能です。

特定のサービスについて、systemdが読み込んでいるものを確認するには、systemctl status <service>またはsystemctl show <service>を実行します。

$ systemctl show ssh.service | grep Path
FragmentPath=/lib/systemd/system/ssh.service
DropInPaths=/etc/systemd/system/ssh.service.d/override.conf
$ systemctl status ssh.service
● ssh.service - OpenBSD Secure Shell server
   Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/ssh.service.d
           └─override.conf
   Active: active (running) since Thu 2017-01-26 16:06:53 JST; 21h ago
 Main PID: 948 (sshd)
   CGroup: /system.slice/ssh.service
           └─948 /usr/sbin/sshd -D
27
muru

何かを見つける必要があるときはいつでも知っておくと良いツールがあります。

最初はlocateで、名前でファイルを見つけるために使用されます。事前に作成されたインデックスを使用するため、非常に高速です。ただし、インデックスが作成されていない新しいファイルを見落とす場合や、許可が制限されているファイルを見逃す場合があります。この場合、クイックlocateコマンドはUbuntu上のすべてのsystemdファイルを検索します。

locate systemd

そのPlexファイルに注目したい場合は、パイプを使用して結果をフィルタリングできます。

locate systemd | grep plex

知っておくべきもう1つのツールはfindです。これは、ファイルを見つけるために特定のディレクトリのライブ検索を行います。 lotのオプションがあります。詳細については、man findを確認してください。システム上のplexmediaserver.serviceを探すには、次を使用します。

find / -name plexmediaserver.service

最後に、この場合、あなたはおそらくあなたが探しているファイルが属しているpackageを知っているでしょう。正確なパッケージ名がわからない場合は、次の構文を使用して、名前に「plex」を含むすべてのパッケージを検索できます。

dpkg -l '*plex*'

興味のあるパッケージの名前が「plexmediaserver」であることがわかった場合、この構文を使用してそのパッケージ内のすべてのファイルをリストできます。

dpkg -L plexmediaserver

ここでも、パイプを使用して、検索対象のサービスファイルのみに結果をフィルターできます。

dpkg -L plexmediaserver | grep plexmediaserver.service

これで、多くの一般的なケースのファイルを見つけることができます。

10
Mark Stosberg