Où se trouvent les unités / services systemd dans Ubuntu?

23

Je continue de trouver, pendant la recherche sur Google, qu'ils se trouvent dans / usr / lib / systemd / system / et / etc / systemd / system /. Cependant, dans mon ubuntu, le premier n'existe même pas, et l'autre n'a que quelques services

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

Où sont les autres?

Lorsque j'exécute des unités de liste systemctl, je vois tellement de services mais je ne sais pas où les localiser. Par exemple, où est mon plexmediaserver.service? J'ai besoin de savoir car c'est là que je veux mettre mes autres unités.

Guerlando OCs
la source

Réponses:

33

Les fichiers de service fournis par le package se trouvent généralement dans /lib/systemd/system. Par exemple, recherchez .servicedans l'index du package .

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

Ces derniers sont destinés aux sessions utilisateur. IIRC Ubuntu 16.04 utilise toujours upstart pour les sessions utilisateur, donc ces fichiers ne sont applicables qu'à partir du 16.04.

Pour un service spécifique, pour voir ce que systemd lit, exécute systemctl status <service>ou 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
la source
1
Je vous remercie! Aussi, où sont les autres? Je veux connaître tous les endroits où le processus d'initialisation de systemd va chercher
OC Guerlando
1
@GuerlandoOCs voir la mise à jour.
muru
11

Il existe de bons outils à connaître chaque fois que vous devez localiser quelque chose.

Le premier est locate, qui est utilisé pour localiser les fichiers par nom. Il utilise un index pré-construit, il est donc extrêmement rapide. Cependant, il manque parfois de nouveaux fichiers qui n'ont pas été indexés, ou peut également manquer des fichiers avec des autorisations restrictives. Dans ce cas, une locatecommande rapide trouverait tous les fichiers systemd sur Ubuntu:

locate systemd

Si vous souhaitez vous concentrer sur ce fichier Plex, vous pouvez utiliser un tuyau pour filtrer les résultats:

locate systemd | grep plex

L'autre outil à connaître est find, qui effectue une recherche en direct d'un répertoire particulier pour trouver des fichiers. Il a beaucoup d'options. Vérifiez les man finddétails. Pour rechercher plexmediaserver.servicen'importe où sur votre système, vous utiliseriez:

find / -name plexmediaserver.service

Enfin, dans ce cas, vous savez probablement à quel package appartient le fichier que vous recherchez. Si vous n'êtes pas sûr du nom exact du package, vous pouvez utiliser cette syntaxe pour rechercher tous les packages qui contiennent «plex» dans leur nom:

dpkg -l '*plex*'

Si vous trouvez que le package qui vous intéresse est nommé «plexmediaserver», vous pouvez utiliser cette syntaxe pour répertorier tous les fichiers de ce package:

dpkg -L plexmediaserver

Encore une fois, vous pouvez utiliser un canal pour filtrer les résultats uniquement sur le fichier de service que vous recherchez:

dpkg -L plexmediaserver | grep plexmediaserver.service

Vous pourrez maintenant trouver des fichiers pour de nombreux cas courants.

Mark Stosberg
la source