Hay muchos lugares diferentes donde se pueden colocar los archivos de la unidad systemd. ¿Existe una forma rápida y sencilla de preguntar a systemd de dónde lee la declaración de un servicio, teniendo en cuenta solo el nombre del servicio?
Respuesta1
Para las unidades que están definidas en archivos estáticos reales, esto se puede ver en systemctl status
:
$ systemctl status halt-local.service
● halt-local.service - /usr/sbin/halt.local Compatibility
Loaded: loaded (/lib/systemd/system/halt-local.service; static)
Active: inactive (dead)
Pero hay unidades que no están definidas por archivos, por ejemplo con systemd-cron
instalado. Estos no tienen ninguna ubicación útil listada con status
:
$ systemctl status cron-jojo-0.timer
● cron-jojo-0.timer - [Cron] "*/10 * * * * ..."
Loaded: loaded (/var/spool/cron/crontabs/jojo)
Active: active (waiting) since Mon 2015-05-18 14:53:01 UTC; 9min ago
Sin embargo, en cualquier caso, el FragmentPath
campo es educar:
$ systemctl show -P FragmentPath cron-daily.service
/lib/systemd/system/cron-daily.service
$ systemctl show -P FragmentPath cron-jojo-0.service
/run/systemd/generator/cron-jojo-0.service
$ systemctl show -P FragmentPath halt-local.service
/lib/systemd/system/halt-local.service
Respuesta2
Podrías controlar la unidad systemd. Esto muestra la ubicación del archivo como comentarios. Bonificación: también muestra anulaciones.
systemctl cat sssd
# /lib/systemd/system/sssd.service
[Unit]
...
# /etc/systemd/system/sssd.service.d/override.conf
[Unit]
...
Respuesta3
El siguiente muestra varias ubicaciones de archivos.
show
- Mostrar propiedades de una o más unidades/trabajos o el administrador
-p
--property=NAME
Mostrar solo propiedades con este nombre
$ systemctl show -p FragmentPath {accounts-daemon,ntp,sshd}
FragmentPath=/lib/systemd/system/accounts-daemon.service
FragmentPath=/lib/systemd/system/ntp.service
FragmentPath=/lib/systemd/system/ssh.service
Respuesta4
Podrías hacer esto (usando nullmailer como ejemplo):
systemctl show nullmailer | grep FragmentPath | awk -F'=' '{print $2}'
Eso producirá algo como esto:
/lib/systemd/system/nullmailer.service
Luego, para ver el contenido del archivo de servicio, puede hacer esto:
cat $(systemctl show nullmailer | grep FragmentPath | awk -F'=' '{print $2}')
Y eso produciría algo como esto:
[Unit]
Description=nullmailer
[Unit]
Description=Nullmailer relay-only MTA
... stuff omitted for brevity ...
[Install]
WantedBy=multi-user.target
Espero eso ayude.
PD. Normalmente pongo esos comandos en un archivo de alias solo por conveniencia.
P.PS. Como mencionó Joaquín, puedes usar el indicador -P en lugar de usar el combo grep|awk que estaba usando/mencionando.
systemctl show nullmailer -P FragmentPath