Gdzie znajdują się systemowe jednostki / usługi w Ubuntu?

23

Podczas przeglądania Google wciąż znajduję, że znajdują się one w katalogu / usr / lib / systemd / system / i / etc / systemd / system /. Jednak w moim ubuntu pierwszy nawet nie istnieje, a drugi ma tylko kilka usług

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

Gdzie są inni?

Kiedy uruchamiam systemctl list-units, widzę tak wiele usług, ale nie wiem, gdzie je zlokalizować. Na przykład, gdzie jest moja usługa plexmediaserver.service? Muszę wiedzieć, bo tam chcę umieścić moje inne jednostki.

Guerlando OC
źródło

Odpowiedzi:

33

Wszystkie dostarczone przez pakiet pliki usług są zwykle zlokalizowane w /lib/systemd/system. Na przykład wyszukaj .servicew indeksie pakietu .

Od 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/*

Te ostatnie są przeznaczone do sesji użytkowników. IIRC Ubuntu 16.04 nadal używa upstartu do sesji użytkownika, więc te pliki mają zastosowanie dopiero po 16.04.

W przypadku konkretnej usługi sprawdź, co systemd czyta, uruchom systemctl status <service>lub 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
muru
źródło
1
Dziękuję Ci! A gdzie są inni? Chcę poznać wszystkie miejsca, w których będzie szukał usystematyzowany proces inicjowania
Guerlando OC
1
@GuerlandoOCs patrz aktualizacja.
muru
11

Istnieją dobre narzędzia, o których warto wiedzieć, gdy trzeba coś znaleźć.

Pierwszym jest locate, który służy do lokalizowania plików według nazwy. Używa gotowego indeksu, więc jest niezwykle szybki. Czasami jednak pomija nowe pliki, które nie zostały zindeksowane, lub może również brakować plików z ograniczonymi uprawnieniami. W takim przypadku szybkie locatepolecenie odnalazłoby wszystkie pliki systemowe w systemie Ubuntu:

locate systemd

Jeśli chcesz skupić się na tym pliku Plex, możesz użyć potoku do filtrowania wyników:

locate systemd | grep plex

Innym narzędziem, o findktórym warto wiedzieć, jest wyszukiwanie na żywo określonego katalogu w celu znalezienia plików. Ma wiele opcji. Sprawdź man findszczegóły. Aby wyszukać plexmediaserver.servicegdziekolwiek w systemie, użyj:

find / -name plexmediaserver.service

Wreszcie, w tym przypadku prawdopodobnie wiesz, do którego pakietu należy plik, którego szukasz. Jeśli nie masz pewności co do dokładnej nazwy pakietu, możesz użyć tej składni, aby znaleźć cały pakiet zawierający w nazwie „plex”:

dpkg -l '*plex*'

Jeśli okaże się, że interesujący cię pakiet nazywa się „plexmediaserver”, możesz użyć tej składni, aby wyświetlić listę wszystkich plików w tym pakiecie:

dpkg -L plexmediaserver

Ponownie możesz użyć potoku do filtrowania wyników tylko do szukanego pliku usługi:

dpkg -L plexmediaserver | grep plexmediaserver.service

Teraz będziesz mógł znaleźć pliki dla wielu typowych przypadków.

Mark Stosberg
źródło