Pendant que nous cherchions sur Google, je continue de constater 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 les unités de liste systemctl, je vois autant de services mais je ne sais pas où les localiser. Par exemple, où se trouve mon plexmediaserver.service? J'ai besoin de savoir parce que c'est là que je veux placer mes autres unités.
Les fichiers de service fournis par le paquet sont tous généralement situés dans /lib/systemd/system
. Par exemple, recherchez .service
dans 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/*
Les derniers sont pour les sessions utilisateur. IIRC Ubuntu 16.04 utilise toujours la méthode upstart pour les sessions d’utilisateur. Par conséquent, ces fichiers ne sont applicables qu’après 16.04.
Pour un service spécifique, pour voir quel systemd est en train de lire, exécutez 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
Il existe de bons outils à connaître chaque fois que vous devez localiser quelque chose.
Le premier est locate
, qui permet de localiser les fichiers par leur 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-être aussi des fichiers avec des autorisations restrictives. Dans ce cas, une commande rapide locate
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 dans un répertoire particulier pour trouver des fichiers. Il a un lot d'options. Vérifiez 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 savez probablement à quel package auquel appartient le fichier que vous recherchez. Si vous n'êtes pas sûr du nom exact du paquet, vous pouvez utiliser cette syntaxe pour trouver tous les paquets qui contiennent "plex" dans leur nom:
dpkg -l '*plex*'
Si vous trouvez que le paquet qui vous intéresse s'appelle 'plexmediaserver', vous pouvez utiliser cette syntaxe pour lister tous les fichiers de ce paquet:
dpkg -L plexmediaserver
Encore une fois, vous pouvez utiliser un tuyau pour filtrer les résultats uniquement dans le fichier de service que vous recherchez:
dpkg -L plexmediaserver | grep plexmediaserver.service
Vous pourrez maintenant trouver des fichiers pour de nombreux cas courants.