Wo befinden sich die Systemeinheiten / -dienste in Ubuntu?

23

Beim googeln stelle ich immer wieder fest, dass sie sich unter / usr / lib / systemd / system / und / etc / systemd / system / befinden. In meinem Ubuntu gibt es jedoch das erste nicht einmal, und das andere hat nur wenige Dienste

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

Wo sind die anderen?

Wenn ich systemctl list-units starte, sehe ich so viele Dienste, aber ich weiß nicht, wo ich sie finden soll. Wo ist zum Beispiel mein plexmediaserver.service? Ich muss es wissen, weil ich dort meine anderen Einheiten aufstellen möchte.

Guerlando OKs
quelle

Antworten:

33

Die vom Paket bereitgestellten Servicedateien befinden sich normalerweise in /lib/systemd/system. Suchen.service Sie beispielsweise im Paketindex nach .

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

Die letzteren sind für Benutzersitzungen. IIRC Ubuntu 16.04 verwendet weiterhin Upstart für Benutzersitzungen, sodass diese Dateien erst ab 16.04 gültig sind.

Um für einen bestimmten Dienst zu sehen, was systemd liest, führen Sie systemctl status <service>Folgendes aus 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
quelle
1
Vielen Dank! Auch wo sind die anderen? Ich möchte alle Orte kennen, an denen der systemd init-Prozess suchen wird
Guerlando OCs
1
@GuerlandoOCs siehe Update.
Muru
11

Es gibt gute Werkzeuge, über die Sie Bescheid wissen müssen, wenn Sie etwas suchen müssen.

Der erste ist locate, der verwendet wird, um Dateien nach Namen zu suchen. Es verwendet einen vorgefertigten Index und ist daher extrem schnell. Es fehlen jedoch manchmal neue Dateien, die nicht indiziert wurden, oder möglicherweise auch Dateien mit eingeschränkten Berechtigungen. In diesem Fall locatewürde ein Schnellbefehl alle systemd-Dateien auf Ubuntu finden:

locate systemd

Wenn Sie sich auf diese Plex-Datei konzentrieren möchten, können Sie die Ergebnisse mit einer Pipe filtern:

locate systemd | grep plex

Das andere Tool, über das Sie Bescheid wissen sollten, ist finddas Live-Durchsuchen eines bestimmten Verzeichnisses, um Dateien zu finden. Es gibt viele Möglichkeiten. Überprüfen Sie die man findDetails. Um plexmediaserver.serviceauf Ihrem System nach einer beliebigen Stelle zu suchen , verwenden Sie:

find / -name plexmediaserver.service

Schließlich wissen Sie in diesem Fall wahrscheinlich, zu welchem Paket die gesuchte Datei gehört. Wenn Sie den genauen Paketnamen nicht kennen, können Sie mit dieser Syntax alle Pakete suchen, deren Name 'plex' enthält:

dpkg -l '*plex*'

Wenn Sie feststellen, dass das Paket, das Sie interessiert, den Namen "plexmediaserver" trägt, können Sie die folgende Syntax verwenden, um alle Dateien in diesem Paket aufzulisten:

dpkg -L plexmediaserver

Sie können auch hier eine Pipe verwenden, um die Ergebnisse nach der gesuchten Servicedatei zu filtern:

dpkg -L plexmediaserver | grep plexmediaserver.service

Jetzt können Sie Dateien für viele gängige Fälle finden.

Mark Stosberg
quelle