Gestión de servicios con systemctl

Para administrar servicios utilizaremos el comando systemctl:

# Listar todos los servicios activos (ejecutándose) del sistema
systemctl list-units --type service
 
# Listar todos los servicios activos y también los inactivos
systemctl list-units --type service --all
 
# Iniciar, parar o reiniciar un servicio
systemctl start nombre.service
systemctl stop nombre.service
systemctl restart nombre.service
 
#   Reiniciar únicamente si el servicio está ya iniciado
systemctl try-restart nombre.service
 
#   Recargar configuración
systemctl reload nombre.service
 
#   Comprobar el estado de un servicio o si se está habilitado (enabled)
systemctl status nombre.service
systemctl is-enabled nombre.service
 
#   Comprobar si un servicio está activado (ejecutándose)
systemctl is-active nombre.service
 
#   Habilitar un servicio (para que se inicie al arrancar el sistema)
systemctl enable nombre.service
 
#   Deshabilitar servicio
systemctl disable nombre.service
 
#   Hacer kill a un servicio (por defecto SIGTERM)
systemctl kill nombre.service
 
#   Podemos especificar la señal que enviamos para hacer el kill con -s.
#   Por ejemplo enviar SIGKILL
systemctl kill -s SIGKILL nombre.service
 
También podemos hacer un reinicio, halt o apagado del sistema:
systemctl reboot
systemctl halt
systemctl poweroff
 
A mencionar dos opciones bastante interesantes:
 
#   Enmascarar
systemctl mask nombre.service
 
#   Desenmascarar
systemctl unmask nombre.service
 
Cuando enmascaramos un servicio, no sólo lo deshabilitamos sino que evitamos que se pueda iniciar manual o automáticamente.

 

En otro orden de cosas, podemos analizar el tiempo de inicio de cada uno de los servicios al arrancar el sistema con systemd-analyze blame:

systemd-analyze

systemd-analyze blame

 

Optimizar los servicios de arranque con systemd

Si cada vez que arrancáis  vuestros ordenadores con linux tarda una eternidad en llegar  a la pantalla de login, es buena idea ver si existe algún servicio que no sea necesario y que este consumiendo mucho tiempo en el arranque del sistema.

Actualmente,  la mayoría de las distribuciones linux principales han migrado de init a systemd como sistema predeterminado para la gestión de demonios.  Nosotros vamos a aprovechar la utilidad systemd-analyze para intentar averiguar que servicios no son necesarios y poder deshabilitarlos.

Si ejecutamos el comando tal cual(como root, importante) se nos mostrará algo como esto:

 

systemd-analyze

Startup finished in 2.291s (kernel) + 1.671s (initrd) + 3.069s (userspace) = 7.031s

 

Como podéis ver lo que nos muestra es el tiempo total del arranque del sistema, desglosando el tiempo en espacio de usuario , de kernel y en la carga del initrd. Esto está bien como información general, pero lo que nos interesa es saber los procesos que se ejecutan y cuanto tiempo consumen. Para eso le pasamos el parámetro blame.

 

systemd-analyze blame

2.286s dkms_autoinstaller.service
1.018s plymouth-start.service
949ms plymouth-quit-wait.service
435ms fedora-storage-init.service
167ms systemd-udev-settle.service
143ms NetworkManager.service
89ms iscsid.service
83ms bumblebee-nvidia.service
75ms home.mount
73ms systemd-sysctl.service
66ms systemd-fsck-root.service
59ms acpid.service
54ms fedora-loadmodules.service
54ms iprinit.service
53ms iprupdate.service
47ms gdm.service
46ms systemd-binfmt.service
43ms proc-sys-fs-binfmt_misc.mount
42ms systemd-udev-trigger.service
35ms systemd-modules-load.service
34ms accounts-daemon.service
32ms sys-kernel-debug.mount
32ms dev-mqueue.mount
32ms dev-hugepages.mount
31ms systemd-vconsole-setup.service
26ms systemd-tmpfiles-clean.service
25ms systemd-udevd.service
25ms iprdump.service
25ms fedora-storage-init-late.service
22ms sendmail.service
19ms mcelog.service
17ms udisks2.service
17ms irqbalance.service
16ms colord.service
16ms bluetooth.service
14ms rtkit-daemon.service
13ms systemd-logind.service
13ms plymouth-read-write.service
11ms sm-client.service
11ms alsa-restore.service
10ms fedora-readonly.service
10ms polkit.service
9ms restorecond.service
8ms sshd.service
8ms systemd-user-sessions.service
7ms upower.service
5ms sys-kernel-config.mount
5ms systemd-tmpfiles-setup.service
4ms fedora-import-state.service
4ms systemd-readahead-replay.service
3ms systemd-readahead-collect.service
3ms xsupplicant.service
3ms systemd-remount-fs.service
3ms var-tmp.mount
2ms var-log.mount
2ms wpa_supplicant.service
2ms sys-fs-fuse-connections.mount
2ms systemd-readahead-done.service
2ms tmp.mount
1ms rpcbind.service
1ms systemd-update-utmp-runlevel.service
1ms systemd-journal-flush.service
1ms systemd-random-seed-load.service

Como veís hay un buen par de servicios, aunque la mayoría tardan unos pocos milisegundos, vamos a centrarnos en los primeros de la lista usando el comando head de la bash.

 

# systemd-analyze blame | head

2.286s dkms_autoinstaller.service
1.018s plymouth-start.service
949ms plymouth-quit-wait.service
435ms fedora-storage-init.service
167ms systemd-udev-settle.service
143ms NetworkManager.service
89ms iscsid.service
83ms bumblebee-nvidia.service
75ms home.mount

 

Lo único que nos queda es estudiar que servicio no son necesarios en nuestro caso y desactivarlos con el siguiente comando

# systemctl disable nombre.service