Systemd es el sistema de inicialización y gestor de servicios que arranca, detiene y supervisa los procesos esenciales de Linux de manera paralela y eficiente.
Cuando enciendes tu equipo con Linux, numerosos servicios como red, sonido o entorno gráfico deben iniciarse en el orden correcto. El comando systemd actúa como un director de orquesta: gestiona cada servicio (o «unidad»), controla sus dependencias y acelera el arranque al lanzarlos en paralelo. Además, monitoriza su estado durante toda la sesión y centraliza sus registros para facilitar el diagnóstico.
Conceptos básicos
Hace años, SysV init era el encargado de arrancar servicios. Ahora systemd introduce unidades («units»), dependencias paralelas y cero soft–fork.
En systemd todo gira en torno a unidades (units), que son archivos de configuración que describen servicios, tareas temporizadas o agrupaciones. A continuación, los términos esenciales:
- Unit: archivo .service, .timer, .target… define qué hacer y cuándo.
- Service: tipo de unit para servicios (daemon).
- Timer: ejecuta unidades en horarios o tras intervalos.
- Target: grupo de units para alcanzar estados (equivalente a runlevels).
- Journald: sistema de registro centralizado en binario, consulta con journalctl.
Nota técnica: Cuando hablamos de «cero soft-fork», systemd no requiere que los servicios se demonicen usando la técnica de doble fork (soft–fork). En lugar de eso, lanza el proceso directamente y gestiona su PID internamente, eliminando bifurcaciones (forks) adicionales y reduciendo la sobrecarga al arrancar los servicios.
Gracias a esta estructura, systemd arranca servicios simultáneamente cuando no dependen unos de otros, haciendo el inicio mucho más rápido y fiable que el viejo SysV.
Estructura general de uso
Estructura de uso: systemctl [opciones] comando servicio
Dicho de forma sencilla: primero escribimos systemctl, después podemos añadir alguna opción, luego indicamos la acción que queremos realizar y, si corresponde, el nombre del servicio.
Algunas acciones habituales con systemctl:
list-units: lista las unidades cargadas.list-timers: muestra temporizadores activos.status: muestra el estado de un servicio.start: inicia un servicio.stop: detiene un servicio.enable: activa un servicio para que arranque con el sistema.disable: impide que arranque automáticamente.- etc…
Cómo listar todos los servicios:
$ systemctl list-units –type=service
► 1973sobreruedas@manual_de_supervivencia_linux ◄ /Linux Mint 22.1\ - Manual de supervivencia linux - /xia 22.1\ ~ -> $ systemctl list-units --type=service UNIT > accounts-daemon.service loaded active r> alsa-restore.service loaded active e> apache2.service loaded active r> apparmor.service loaded active e> avahi-daemon.service loaded active r> binfmt-support.service loaded active e> blk-availability.service loaded active e> ● casper-md5check.service loaded failed f> colord.service loaded active r> console-setup.service loaded active e> cron.service loaded active r> cups-browsed.service loaded active r> cups.service loaded active r> dbus.service loaded active r> [...] Lines 1-38 [...]
La extensión de los servicios es bastante amplia, para poder moverse se utiliza ↑ y ↓; para salir del modo de listado pulsar q.
Es útil comprobar si algún servicio tiene errores, éstos la Terminal los marca en rojo.
Ejemplos:
$ systemctl status sshd.service
systemctl → herramienta
status → acción [opción]
sshd.service → servicio consultado
$ systemctl enable nginx.service
systemctl → herramienta
enable → acción [opción]
nginx.service → servicio que hemos habilitado
Diagnóstico y logs
Cuando un servicio falla, no siempre basta con mirar si está activo o detenido. También conviene revisar qué ha dejado escrito en los registros del sistema. Para eso usamos journald, la herramienta que permite consultar los mensajes recogidos por journald.
⚠️ Esta parte ya entra en un uso más avanzado. No es necesario crear unidades propias para usar Linux a diario, pero conviene saber que journald permite definir servicios personalizados cuando queremos automatizar tareas o lanzar scripts al arrancar.
Algunas opciones útiles de journalctl:
--since fecha / hora: muestra líneas a partir de una fecha u hora (ejemplo:--since "2025-06-01"o--since "1 hour ago").--until fecha / hora: muestra líneas hasta la fecha u hora indicada.-f: sigue en tiempo real (equivalente atail -f).-u servicio: filtra registros de una unidad de systemd (p.ej.-u nginx.service).-p nivel: muestra sólo mensajes de cierta prioridad (err, warning, info, debug…).-b: muestra sólo logs del inicio de sistema actual (boot).
Ejemplo:
$ journalctl -u mi-servicio.service -p err -b
En este caso mostrará:
-u mi-servicio.service: restringe a esa unidad.-p err: sólo mensajes de error.-b: logs del arranque actual.
Creación de unidades personalizadas
Sección avanzada
Creación de una unidad de servicio de ejemplo.
En modo root:
root@manual_de_supervivencia_linux /- Manual de Supervivencia Linux -\ ► Modo root ◄ /etc/systemd/system -> # nano mi-servicio.service [Unit]
Description=Mi servicio de ejemplo
After=network.target
[Service]
ExecStart=/usr/bin/mi-script
Restart=on-failure
[Install]
WantedBy=multi-user.target
Este archivo define una unidad de servicio para systemd. No es un script en sí mismo, sino una pequeña ficha de instrucciones que indica al sistema qué debe ejecutar, cuándo debe hacerlo y cómo debe comportarse si falla.
[Unit]: describe el servicio y permite indicar dependencias o condiciones de arranque.Description: texto descriptivo que aparecerá al consultar el estado del servicio.After=network.target: indica que esta unidad debe iniciarse después de que el sistema haya alcanzado el objetivo de red.[Service]: define cómo se ejecuta el servicio.ExecStart: ruta del programa o script que systemd debe lanzar.- Nota: En este ejemplo,
/usr/bin/mi-scriptrepresenta un script ficticio.
- Nota: En este ejemplo,
Restart=on-failure: reinicia el servicio sólo si falla.[Install]: indica cómo se integrará la unidad si la activamos para el arranque.WantedBy=multi-user.target: permite que el servicio se inicie en un entorno multiusuario normal, sin necesidad de entorno gráfico.
Después de crear o modificar una unidad, systemd necesita recargar su configuración interna:
# systemctl daemon-reload
Una vez recargada la configuración, ya podemos iniciar el servicio manualmente:
# systemctl start mi-servicio.service
En un caso real, conviene comprobar que la ruta indicada en ExecStart existe, que el archivo tiene permisos de ejecución y que el servicio arranca correctamente con systemctl status mi-servicio.service.
Pequeña reflexión
Aunque solemos interactuar con Linux mediante aplicaciones gráficas, gran parte del sistema funciona gracias a servicios que trabajan silenciosamente en segundo plano. Comprender cómo funciona systemd no significa memorizar todos sus comandos, sino entender mejor qué ocurre realmente cuando encendemos nuestro equipo.


Deja una respuesta