Systemd: servicios con systemctl
Introducción
Systemd es el sistema de inicio (init system) estándar en la mayoría de
distribuciones Linux modernas (Debian, Ubuntu, Fedora, RHEL, Arch…). Reemplaza al antiguo SysVinit y
gestiona el arranque del sistema, los servicios (demonios), los puntos de montaje, los temporizadores y
mucho más. El comando principal para interactuar con systemd es systemctl.
Consultar el estado de un servicio
$ systemctl status nginx
$ systemctl status sshd
La salida muestra si el servicio está activo, su PID, los últimos logs y si está habilitado al arranque.
● nginx.service - A high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
Active: active (running) since Mon 2025-01-01 10:00:00 UTC; 2h ago
Process: 1234 ExecStart=/usr/sbin/nginx
Main PID: 1234 (nginx)
Iniciar, detener y reiniciar servicios
# systemctl start nginx # iniciar el servicio
# systemctl stop nginx # detener el servicio
# systemctl restart nginx # detener y volver a iniciar
# systemctl reload nginx # recargar configuración sin detener
# systemctl reload-or-restart nginx # recarga si puede, reinicia si no
restart→ para el proceso y lo vuelve a arrancar. Hay un breve momento de inactividad-
reload→ el proceso sigue corriendo pero relee su configuración (no todos los servicios lo soportan)
Habilitar y deshabilitar en el arranque
Habilitar un servicio significa que se iniciará automáticamente al arrancar el sistema. Deshabilitarlo evita que arranque solo.
# systemctl enable nginx # habilitar en el arranque
# systemctl disable nginx # deshabilitar en el arranque
# systemctl enable --now nginx # habilitar Y arrancar ahora
# systemctl disable --now nginx # deshabilitar Y parar ahora
enable crea un enlace simbólico en el directorio de targets adecuado.
disable lo elimina.
Enmascarar un servicio
mask impide que el servicio pueda iniciarse de cualquier forma, incluso manualmente. Es más restrictivo
que disable.
# systemctl mask bluetooth # impide cualquier arranque
# systemctl unmask bluetooth # quita la máscara
Listar servicios y unidades
$ systemctl list-units --type=service # servicios activos
$ systemctl list-units --type=service --all # todos (incluidos inactivos)
$ systemctl list-unit-files --type=service # estado de habilitación
$ systemctl is-active nginx # devuelve active o inactive
$ systemctl is-enabled nginx # devuelve enabled o disabled
$ systemctl is-failed nginx # devuelve failed si falló
daemon-reload
Cuando modificas o creas archivos de unidad (.service) debes recargar la configuración de systemd
antes de que los cambios surtan efecto.
# systemctl daemon-reload