Administrar servicios con Systemd, SysV, OpenRC y Runit

En este blog hablamos poco sobre administración de sistemas porque su meta y fin, sobre todo, es el inicio del usuario en GNU/Linux y la defensa y uso del software libre. Pero eso no significa que no se hable de otras áreas, y a veces tocamos temas que interesen a un administrador de sistemas. Hoy vamos a aprender a listar los servicios de nuestro sistema operativo usando Systemd y Sysvinit.

Servicios hay muchos. Unos se encargan de iniciar/detener el stack bluetooth, por ejemplo, o el descubrimiento de impresoras con CUPS, el servicio de redes y decenas de demonios que debemos de controlar si estamos administrando un sistema. Systemd es el gestor de inicio/servicios más usado, dado que la aplastante mayoría de distribuciones lo trae implementado de serie. Sysvinit, como una alternativa a Systemd, cada día tiene más seguidores. Veamos cómo listar servicios en los dos distintos sistemas de inicio.

Ante todo, si estás empezando o aprendiendo a administrar un sistema, debemos de comprobar que tipo de inicio tenemos en nuestra distribución GNU/Linux. Eso lo sabremos con la siguiente orden:

pstree | head -n 5

Como podemos observar, estoy usando Systemd. En el caso de usar otro inicio, arriba a la izquierda aparecería Sysvinit, OpenRC, etc.

Systemd

La orden para listar todos los servicios con Systemd sería:

systemctl list-units --type=service

Con la tecla flecha puedes navegar por el listado de los servicios. La información te indica si el servicio está cargado, activo y una descripción. Para salir, presiona la tecla q.

Para listar todos los servicios, es decir, activos e inactivos, hay que utilizar la orden systemctl list-units seguido de la opción –all.

Del mismo modo, se pueden limitar los resultados a los servicios sólo mediante el filtro de tipos.

systemctl list-units --type=service --all

Como puedes ver, los servicios inactivos también están listados.

En el arranque, Systemd carga los archivos de unidad y puede elegir no cargar un servicio específico si encuentra que no será utilizado por el sistema.

Como consecuencia, existe una diferencia real entre los servicios “cargados” y los “instalados”. Los servicios “instalados” significan que los archivos de unidad se pueden encontrar en las rutas correspondientes.

En algunos casos, puede que sólo te interesen los servicios que han fallado. Para ello, puedes especificar el estado que buscas como una opción de la orden systemctl.

systemctl list-units --state=failed

Las opciones pueden ser: active, inactive, activating, deactivating, failed, not-found o dead.

En mi caso no hay unidades con fallo. Abajo, la salida con la opción active y la salida con failed.

Sysvinit

Sysvinit no tiene la cantidad de opciones de Systemd pero también es posible obtener datos que nos interesa.

service --status-all

Lamentablemente no estoy usando una distribución con SysV por lo que no puedo adjuntar imágenes ilustrativas, pero debes saber que junto con la salida aparecerán los siguientes símbolos:

+ : Significa que el servicio está funcionando.
Significa que el servicio no está funcionando en absoluto.
? : Significa que tu sistema no fue capaz de decir si el servicio está funcionando o no.

Entonces, ¿por qué algunos servicios pueden decir si se están ejecutando o no, y otros no pueden? Todo se reduce a la implementación del script de inicio. En algunos scripts, como el script udev por ejemplo, se puede ver que con la orden “status” está implementado.

Otra forma de enumerar la lista actual de servicios es utilizar la orden “ls” en los directorios que contienen todos los scripts de un sistema GNU/Linux, a saber, “/etc/init.d”.

ls -l /etc/init.d/*

 

OpenRC

Manejar los servicios con el inicio OpenRC difiere en la parte técnica así como en las órdenes de bash con Systemd y SysV. En general, para listar todos los servicios, se ejecuta:

rc-status --list

El resultado sería:
boot
default
nonetwork
shutdown
sysinit

Donde:

boot – Por lo general, los únicos servicios que se deben añadir al nivel de ejecución de arranque son los que se ocupan del montaje de los sistemas de archivos, el establecimiento del estado inicial de los periféricos adjuntos y el registro. Los servicios de conexión en caliente son añadidos al nivel de ejecución de arranque por el sistema. Todos los servicios en los niveles de ejecución de arranque y sysinit se incluyen automáticamente en todos los demás niveles de ejecución, excepto los que se enumeran aquí.
single – Detiene todos los servicios excepto los del nivel de ejecución sysinit.
reboot – Cambia al nivel de ejecución de apagado y luego reinicia el host.
shutdown – Cambia al nivel de ejecución de apagado y luego detiene el host.
default: Se utiliza si no se especifica ningún nivel de ejecución. Por lo general, éste es el nivel de ejecución al que desea agregar servicios.

Para ver los servicios iniciados manualmente, ejecuta:

rc-status --manual

Para ver los servicios que se han colgado:

rc-status --crashed

Lstar todos los servicios disponibles:

rc-service --list

Si lo que quieres es habilitar un servicio en el inicio, ejecuta:

rc-update add {nombre del servicio} {nombre del nivel}

Donde el nombre del nivel podría ser default.

 

Runit

Runit es otro sistema de inicio, usado por la distribución Void Linux entre otras pocas más y también tiene sus propias características y órdenes distintas a las de otros gestores de inicio.

Con runit (mejor en minúsculas), si queremos ver todos los servicios en ejecución, lanzamos en la terminal:

sv status /var/service/*

Aquí nos aparecerán de forma distinta, a la salidad de Systemd, OpenRC y SysV. Su sintaxis será así:

run: /var/service/agetty-2: (pid 4120) 7998s
run: /var/service/agetty-3: (pid 4119) 7998s
run: /var/service/bougyman: (pid 4465) 7972s
run: /var/service/bougyx: (pid 4135) 7998s; run: log: (pid 4127) 7998s
run: /var/service/cron: (pid 4137) 7998s; run: log: (pid 4122) 7998s
run: /var/service/dialer: (pid 4121) 7998s

Como se puede apreciar, la salida indica la ruta dónde está alojado el servicio, el nombre del servicio y el PID de la ejecución.

Para crear un servicio, debes enlazarlo desde /etc/sv/ a /var/service/. Por ejemplo el servicio ssh:

ln -s /etc/sv/ssh /var/service/ssh

Para detener, reiniciar e iniciar el servicio:

sv down /var/service/ssh
sv restart /var/service/ssh
sv up /var/service/ssh

Con esto, aunque no es una profundización de los servicios, porque en realidad existen muchas más opciones en todos los inicios, al menos sabrás lo más básico.

5 5 votes
Article Rating
Subscribe
Notify of
guest
12 Comentarios
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Iván

Justo ayer mismo estaba preocupado por encontrar material fiable (y sobre todo para novatos como yo) sobre este tema, y venís y sacás esto, excelente, muy agradecido. ¿Seria mucho pedir un segundo post con la misma información pero para OpenRC y Runit? El primero lo uso en Artix Linux y el segundo en AntiX Linux, y tengo interés en conocerlos un poco mejor. Desde ya, agradecido por el aporte. Abrazo desde Argentina.

unodetantos

Yo también uso Artix. Para OpenRC la wiki de Gentoo es tu gran amiga  😉 

Esa wiki es como la de Arch pero no todo está enfocado a systemd. Tienen incluso una página de runit, puedes verla aquí. También tienen de otros init. La cierto es que aunque no tengas Gentoo es una wiki tan imprescindible como la de Arch. Yo personalmente tengo el buscador de su wiki en mi Firefox igual que el de Arch  😀 

gcc123

A mi SystemD me fue de gran utilidad cuando una vez abrí un video con vlc en modo normal y otro en emulador de terminal , o sea 2 vlc, nada mal hasta el momento, pero por alguna razón no podia salir de pantalla completa , no habia video, solo sonido y me asusté, creí que se echó a perder la maquina, luego con ctrl+alt+f1 entré via tty a mi usuario cuyo video no funcionaba y puse el comando kill o kill -9 a los vlc pero seguia el problema, asi que solo por probar puse systemd-cgls y alli estaba el vlc abierto por terminal, puse el pid correspondiente al lado del comando kill -9 y problema resuelto 🙂 A lo mejor si me hubiera acordado que abrí vlc por terminal y este no saldría con nombre “vlc” en el programa top sino “mate-terminal”, podria aberlo solucionado igual, pero esa lista que hace systemd-cgls es muy detallada y me salio hasta la musica que puse en el orden correspondiente: primero terminal, despues vlc y luego el nombre de la cancion 🙂 asi que en fin, algo en que este programita me saca de un susto y al final, todo bien 🙂

Vagabundo Oscuro

Dragon Player es muy bueno, pero ¿no te animas con mpv?

gcc123

Ese hay que aprenderse todos los controles de teclado, pero creo que es bueno igual 😀

Vagabundo Oscuro

Sí, mpv tiene mucho que ofrecer vía terminal, si a eso le sumamos su fuerte apoyo en FFmpeg e integración (opcional) con youtube-dl, pues tienes una navaja suiza, nada más ver su documentación (http://mpv.io/manual/stable/) te da una idea de todas las posibilidades, no obstante tiene atajos simples para lo básico, pero también dispone de una interfaz sencilla con soporte para arrastrar y soltar (icluso reproducir carpetas) y otras más completas para simplificar aún más el proceso, como Celluloid (GTK), Deepin Movie (Qt) por poner unos ejemplos… No sé, para mí supera por mucho a cualquiera, incluso VLC media player en su mejor momento, por supuesto eso no hace de menos a opciones como Dragon Player, Totem (GNOME Videos) o Parole, pues hacen bien su trabajo, lo bueno es que no faltan opciones (y todas libres), así que sigue con el que se ajuste mejor a ti.

gcc123

Buen programa ya lo instalé 🙂

Zoharis

Es fantástico que hayas incluido la información acerca de otros inits.
Hace unos días me estaba volviendo loca porque aunque tenía instalado PHP, no conseguía que se iniciara en MC Linux que usa Sysvinit.

Busqué información en la web, pero la que existe es escasa o de difícil comprensión al menos, para mí.

Al final, terminé instalando Ubuntu para poderlo ejecutar y fue bastante sencillo por cierto.

Me parece una excelente idea que abordaras éste tema.

Sería muy interesante que hagas más reportajes acerca de este tema.

Un abrazo a la distancia

elc79

Con lo que todavía no me aclaro es con s6, no lo he probado con Artix pero con Obarun la experiencia no fue buena. Sería una muy buena idea una tabla de equivalencias ampliada, ya las hay para sysvinit, systemd y openrc, hace falta ampliarlas con runit y s6. Está muy pero que muy bien que hayan nuevos init aunque en los más nuevos la documentación puede que sea un tanto pobre.

Marcelo

Excelente chuletilla, viene como anillo al dedo ahora que ando probando otros inits.

Y hace unos días salió esto que no sé cuan seguro será de hacer, pero por lo que acá se cuenta, hay una forma segura de cambiar systemd por cualquier otro init en Debian: http://linuxmafia.com/pipermail/conspire/2020-December/011323.html

12
0
Would love your thoughts, please comment.x
()
x