66 votes

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

Je continue de trouver, en faisant des recherches 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 a seulement 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?

Quand je lance systemctl list-units, je vois tellement de services mais je ne sais pas où les trouver. Par exemple, où se trouve mon plexmediaserver.service? Je dois savoir car c'est là que je veux mettre mes autres unités.

98voto

muru Points 180007

Les fichiers de service fournis avec le package sont généralement tous situés dans /lib/systemd/system. Par exemple, recherchez .service dans l'index des packages.

D'après 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/*

Les derniers sont pour les sessions utilisateur. Il me semble qu'Ubuntu 16.04 utilise toujours upstart pour les sessions utilisateur, donc ces fichiers ne sont applicables qu'à partir de 16.04.

Pour un service spécifique, pour voir ce que systemd lit, exécutez systemctl status ou systemctl show :

$ 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 - Serveur OpenBSD Secure Shell
   Chargé : chargé (/lib/systemd/system/ssh.service; activé; préréglage du vendeur : activé)
  Drop-In: /etc/systemd/system/ssh.service.d
           override.conf
   Actif : actif (en cours d'exécution) depuis Thu 2017-01-26 16:06:53 JST; il y a 21 h
 Identifiant principal : 948 (sshd)
   CGroup: /system.slice/ssh.service
           948 /usr/sbin/sshd -D

20voto

Badams Points 156

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

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

locate systemd

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

locate systemd | grep plex

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

find / -name plexmediaserver.service

Enfin, dans ce cas, vous connaissez probablement le package auquel le fichier que vous recherchez appartient. Si vous n'êtes pas sûr du nom exact du package, vous pouvez utiliser cette syntaxe pour trouver 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', alors vous pouvez utiliser cette syntaxe pour lister tous les fichiers de ce package :

dpkg -L plexmediaserver

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

dpkg -L plexmediaserver | grep plexmediaserver.service

Vous pourrez désormais trouver des fichiers pour de nombreux cas courants.

7voto

smac89 Points 723

En utilisant la commande systemd-analyze:

Tous les dossiers qui peuvent contenir des services utilisateur :

systemd-analyze --user unit-paths

Je préfère systemd-analyze --global unit-paths

Tous les dossiers qui peuvent contenir des services système :

systemd-analyze --system unit-paths

Voir : page de manuel

1voto

Dave the Rave Points 71

Trois commandes pour trois répertoires trouvés dans man systemd :

$ pkg-config systemd --variable=systemdsystemunitdir
/lib/systemd/system

$ pkg-config systemd --variable=systemdsystemconfdir
/etc/systemd/system

$ pkg-config systemd --variable=systemduserconfdir
/etc/systemd/user

Je utilise Ubuntu 20.04

Note bonus: systemctl status produit une sortie plus lisible pour l'humain alors que systemctl show produit une sortie plus bas niveau pour les programmes

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X