Presentación
En KDE 6, se está buscando que todos los procesos sean envueltos por systemctl, de manera que todos los procesos esten ordenados jerárquicamente y se le puedan limitar los recursos al usar cgroups.
Systemd es el proceso principal del sistema (PID1) del cual derivan todos los demás procesos, el único ancestro es el IDLE (PID0), que está reservado al kernel.
Servicios
Systemd es el programa que administra todos los servicios del sistema. Estos se encuentran en tres directorios:
| Directorio | Prioridad | Descripción |
|---|---|---|
| /usr/lib/systemd/system | Baja | Servicios creados por el SO |
| /run/systemd/system | Media | Servicios creados por procesos en tiempo de ejecución |
| /etc/systemd/system | Alta | Servicios creados por el usuario |
| ˜/.config/systemd/user | Alta | Servicios que se ejecutan cuando se inica sesión |
Targets
Sistemd usa un sistema de targets, para agrupar los tiempos en que se ejecutan los procesos. Muchos de A continuación presento una lista de muchos de ellos.
| Estados del Sistema | |
|---|---|
| Target | Descripción |
| poweroff.target | Apagado del sistema |
| reboot.target | Reinicio del sistema |
| halt.target | Apagado del sistema sin cortar electricidad |
| kexec.target | Reinicio sin pasar por la bios |
| rescue.target | Modo monousuario para reparaciones |
| emergency.target | Modo más crudo, solo carga /bin/sh y FS en lectura |
| exit.target | Cierre de sesión del usuario |
| Proceso de Arranque | |
|---|---|
| Target | Descripción |
| sysinit.target | Servicios críticos tempranos |
| basic.target | El sistema básico está listo |
| cryptsetup.target | Configuración de discos cifrados |
| local-fs.target | Todos los discos están montados |
| remote-fs.target | Discos remotos montados |
| swap.target | Todas las unidades swap están montadas |
| network.target | Sistema de red listo |
| network-online.target | El sistema tiene dirección IP |
| time-sync.target | Reloj NTP sincronizado |
| Funcionalidad | |
|---|---|
| Target | Descripción |
| multiuser.target | Estado normal de un servidor |
| graphical.target | Estado normal de un escritorio |
| printer.target | Servicios de impresión activo |
| sound.target | Sistema de sonido activo |
| bluetooth.target | Soporte de bluetooth activo |
| Tipos de unidades | |
|---|---|
| Target | Descripción |
| paths.target | Activa todas las unidades .path |
| timers.target | Activa todas las unidades .timer |
| socket.target | Activa todas las unidades .socket |
| slices.target | Gestiona porciones de recursos |
Crear un Servicio
Sección [Unit]
Contiene información general del servicio y algunas directrices. Tiene muchísimos parámetros, listaré los que considero más importantes.
- Description: Breve descripción de lo que hace el programa
- Documentation: Documentación relativa al daemon
- Before, After: Ordena la ejecución de los daemons y dependencias. Ejemplos: After=network.target sshdgenkeys.service Before=ssh-access.target
- Wants: Carga las dependencias necesarias (si es que no están corriendo) al iniciar el daemon. En caso de que alguna dependencia no se cargue inicia el daemon de todas maneras.
- Requires: Lo mismo que Wants, pero si una dependencia no se carga, el daemon queda en estado inactivo.
Sección [Service]
Es la sección específica de un servicio, las otras dos son generales de los archivos Unit. Listo aquí algunas de las dierectrices más importantes:
- Type:
- simple: esume que el servicio está corriendo una vez el kernel le asigna un PID
- notify: Espera hasta que el servicio le envíe una notificación mediante sd_notify.
- notify-reload: similar a notify, pero además envía una notificación cuando un servicio es recargado.
- ExecStart: Es lo más importante. Especifica el comando que será ejecutado al iniciar el daemon.
- Restart: Una de las características más interesantes. Reinicia automáticamente el proceso en caso de que sea cerrado:
- always: reinicia el proceso siempre.
- on-success: reinicia solo si cierra con exit-0.
- on-failure: reinicia solo si cierra con exit-1.
- RestartSec: Determina la cantidad de segundos de espera antes de que el proceso sea iniciado nuevamente.
- StartLimitIntervalSec, StartLimitBurst: Especifica el máximo de veces en que el proceso puede intentar reiniciarse en un intervalo de tiempo. Los valores predeterminados son 10 segundos y 5 veces respectivamente.
- KillMode: Determina si los subprocesos del servicio se matarán también o no.
- control-group: es el que está por defecto, mata todos los subprocesos
- process: mata solo el proceso principal y mantiene los subprocesos.
- mixed: da un tiempo de espera para que el proceso principal mate a los subprocesos. En caso de que no, mata a todos los subprocesos.
Sección [Install]
Directrices al usar systemctl enable
- WantedBy: Crea una dependencia débil con un target, ejemplo WantedBy=multi-user.target
- Crea un enlace simbólico en el directorio .wants/
- RequiredBy: Crea una dependencia fuerte con un target, afectando este. Ejemplo RequiredBy=multi-user.target
- Crea un enlace simbólico en el directorio .requires/
- UpheldBy: Crea una dependencia con un target o servicio. No se deja apagar usando el subcomando stop a menos que la dependencia que lo inició se apague. Su uso es muy poco frecuente.
- Crea un enlace simbólico en el directorio .upholds/