¿Dónde se encuentran las unidades / servicios systemd en Ubuntu?

23

Sigo encontrando, mientras busco en Google, que están ubicados en / usr / lib / systemd / system / y / etc / systemd / system /. Sin embargo, en mi ubuntu, el primero ni siquiera existe, y el otro solo tiene unos pocos servicios

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

¿Donde están los otros?

Cuando ejecuto systemctl list-units veo muchos servicios pero no sé dónde ubicarlos. Por ejemplo, ¿dónde está mi plexmediaserver.service? Necesito saber porque ahí es donde quiero colocar mis otras unidades.

Guerlando OCs
fuente

Respuestas:

33

Los archivos de servicio proporcionados por el paquete generalmente se encuentran en /lib/systemd/system. Por ejemplo, busque .serviceen el índice del paquete .

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

Los últimos son para sesiones de usuario. IIRC Ubuntu 16.04 todavía usa el inicio para sesiones de usuario, por lo que esos archivos solo son aplicables después de 16.04.

Para un servicio específico, para ver qué systemd está leyendo, ejecute systemctl status <service>o 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
fuente
1
¡Gracias! Además, ¿dónde están los otros? Quiero saber todos los lugares donde buscará el proceso systemd init
Guerlando OCs
1
@GuerlandoOCs ver actualización.
Muru
11

Hay buenas herramientas para conocer cuando necesite localizar algo.

El primero es locate, que se utiliza para localizar archivos por nombre. Utiliza un índice preconstruido, por lo que es extremadamente rápido. Sin embargo, a veces se pierden archivos nuevos que no se han indexado, o también pueden faltar archivos con permisos restrictivos. En este caso, un locatecomando rápido encontraría todos los archivos systemd en Ubuntu:

locate systemd

Si desea centrarse en ese archivo Plex, puede usar una tubería para filtrar los resultados:

locate systemd | grep plex

La otra herramienta que debe conocer es find, que realiza una búsqueda en vivo de un directorio particular para encontrar archivos. Tiene muchas opciones. Consultar man findpara más detalles. Para buscar en plexmediaserver.servicecualquier parte de su sistema, usaría:

find / -name plexmediaserver.service

Finalmente, en este caso, probablemente sepa a qué paquete pertenece el archivo que está buscando. Si no está seguro del nombre exacto del paquete, puede usar esta sintaxis para encontrar todos los paquetes que contienen 'plex' en su nombre:

dpkg -l '*plex*'

Si encuentra que el paquete que le interesa se llama 'plexmediaserver', puede usar esta sintaxis para enumerar todos los archivos en ese paquete:

dpkg -L plexmediaserver

De nuevo, puede usar una tubería para filtrar los resultados solo al archivo de servicio que está buscando:

dpkg -L plexmediaserver | grep plexmediaserver.service

Ahora podrá encontrar archivos para muchos casos comunes.

Mark Stosberg
fuente