グーグルしながら、それらが/ 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はどこにありますか?それが他のユニットを置きたい場所だからです。
パッケージが提供するサービスファイルはすべて、通常/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
何かを見つける必要があるときはいつでも知っておくと良いツールがあります。
最初は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
これで、多くの一般的なケースのファイルを見つけることができます。