Proceso Systemd en Linux
Table of Contents
ToggleIntroducción
El proceso Systemd en Linux es un demonio de administración de sistema desarrollado para reemplazar el antiguo sistema de inicio INIT usado por SysVinit. Sin embargo, sigue manteniendo compatibilidad con sus scripts y algunas configuraciones. Al ser el primer proceso en ejecutarse luego del kernel obtiene el PID 1.
Este mecanismo de arranque es el predeterminado en Red Hat, CentOS, Debian, Ubuntu, Arch y otras distribuciones.
Funcionalidades
Proporciona capacidades de paralelización (procesos concurrentes)
Usa sockets y activación vía D-Bus para iniciar servicios
Proporciona inicio por demanda a los daemons
Implementa control basada en dependencias.
Seguimiento procesos usando cgroups (control de recursos)
Mantiene los puntos de montaje y automontaje
Herramientas para controlar la configuración del sistema
Mantiene listas de:
– Usuarios logueados
– Containers
– Máquinas virtuales
– Cuentas del sistema
– Directorios y configuraciones en tiempo de ejecución
– Servicios para configuraciones simples de red
– Servicio de sincronización de tiempo de red
Redireccionamiento de logs
Servicio de resolución de nombres
Unidades de Systemd
Systemd utiliza el concepto de “unidades”, si bien por compatibilidad se continúa manteniendo los comandos y configuraciones de los niveles de ejecución de init (runlevel, init, /etc/rc*), systemd tiene sus propios comandos para el control de los procesos. Veamos esto a continuación.
TIPO DE UNIDAD | EXTENCIÓN | DESCRIPCIÓN |
Servicio | .service | Proceso supervisado y controlado por systemd. |
Target | .target | Grupo de unidades y puntos de sincronización ampliamente conocidos durante el arranque. |
Automontaje | .automount | Punto de montaje automático del sistema de archivos. |
Mount | .mount | Punto de montaje del sistema de archivos. |
Path | .path | Ruta de un archivo o directorio. Se usa para activar otros servicios cuando cambian o se modifican los archivos del sistema. |
Scope | .scope | Gestiona un grupo de procesos del sistema desarrollados de manera externa. |
Slice | .slice | Se usan para gestionar de modo jerárquico los recursos de un grupo de procesos. |
Socket | .socket | Dirección IP, más número de Puerto de comunicación entre procesos, de red, o tubería con nombre supervisada y controlada por systemd. |
Swap | .swap | Archivo swap. |
Timer | .timer | Temporizador, es decir unidad que se activa basada en el tiempo y/o fechas |
Dispositivo | .device | Dispositivo que se encuentra en en sysfs y udev. |
Tener en cuenta:
Es importante destacar que el proceso systemd en Linux, no solamente controla las unidades con extensión .mount, sino que también supervisa y maneja los puntos de montaje independientes y los sistemas de archivos configurados en /etc/fstab. La configuración se encuentra en dos directorios /etc/systemd/system y /usr/lib/systemd/system . Generalmente, los archivos dentro de /usr/lib/systemd/system no deben modificarse de forma manual.
Target en Systemd
En el anterior Sistema “SysVinit” se usaban los llamdas “Runlevels” (niveles de ejecución), sin embargo en el actual Systemd se usa los llamas “Targets”. Estos se usan para agrupar unidades y definir un punto de sincronización determinado durante el arranque del sistema.
Veamos una comparación de los targets con los runlevels:
SysVinit | Systemd | Descripción |
Init 0 | systemctl poweroff | Apaga el sistema |
Init 1,s,S | systemctl rescue | Modo mantenimiento, también llamado “Usuario único” |
Init 2, init 3, init 4 (depende la distribución) | systemctl multi-user | Multiusuario |
Init 5 | systemctl graphical | Modo de entorno gráfico |
Init 6 | Systemctl reboot | Reinicio del sistema |
Para ver esto podemos usar el siguiente comando:
# ls –l /lib/systemd/system/runlevel*
Para definir el modo multi-usuario:
# systemctl set-default multi-user.target
Para establecer el modo gráfico:
# systemctl set-default graphical.target
Luego para verificarlo usamos el primer comando usado anteriormente (# ls –l /lib/systemd/system/runlevel*)
Administración de servicios
Al igual que en los runlevels, existe una mínima diferencia a la hora de configurar los servicios.
La configuración de SysVinit es “Comando-Servicio-Acción”, por ejemplo: # service http start. Sin embargo, con Systemd la configuración es la misma pero con otros argumentos, por ejemplo: # systemctl enable mysql-server.
Veamos las diferencias a continuación en el siguiente cuadro:
SysVinit | Systemd | Descripción |
service httpd restart | systemctl restart httpd.service | Reinicia el servicio httpd |
chkconfig ssh on | systemctl enable ssh.service | Habilita el servicio ssh en el inicio |
chkconfig httpd off | systemctl disable httpd.service | Deshabilita el servicio httpd en el inicio |
chkconfig –list | systemctl list-unit-files –type=service | Lista los servicios y estado de inicio |
No hay equivalencia | systemctl enable –now httpd.service | Habilita el servicio httpd y arranca el servicio |
Cabe mencionar que la tarea de iniciar y detener servicios del sistema (cuya intención es ser ejecutados en segundo plano, como por ejemplo, un servidor web) está a cargo de archivos y enlaces simbólicos en /etc/init.d.
NOTA:
Debemos recordar que haciendo uso del comando systemd – -help veremos la cantidad de operaciones útiles que podemos hacer con este proceso padre.
Por ejemplo, si queremos ver el estado de los servicios:
# systemctl –t service
O también podemos usar la herramienta de SysVinit:
# service –status-all