Ir directamente al contenido

Ajustes de cookies

Elija por tipo qué cookies permite. Puede cambiar su elección en cualquier momento en Ajustes de cookies, al pie de cada página. Declaración de privacidad

Necesarias

Siempre activadas

Necesarias para iniciar sesión, conservar su carrito y recordar sus preferencias. Siempre están activadas.

¿Qué cookies?
  • weboke_sessie, weboke_klant, weboke_remember: su sesión y mantener la sesión iniciada
  • weboke_basket: su carrito
  • wkBtwIncl: mostrar los precios con o sin IVA
  • wok_cookies: su elección de cookies, 12 meses

Mide qué anuncio lleva a una visita o a un pedido, para no pagar por anuncios que no sirven de nada.

¿Qué cookies?
  • Google Ads a través de Google Tag Manager (_gcl_au, _gcl_aw), hasta 90 días
  • OpenAI Ads, anuncios en ChatGPT
  • wok_aff: a través de qué socio llegó a nosotros (programa de afiliados), 60 días

4,6

País e idioma

Cada país tiene su propio sitio, con los precios y el IVA de ese país.

Ver

Módulo 6 · 6.1

Gestionar servicios con systemd

Módulo 6: Servicios y registros · Tiempo de lectura: 10 minutos

Objetivo de aprendizaje: Después de esta lección, usted sabrá iniciar, detener y recargar servicios y hacer que se inicien al arrancar el sistema, leer el estado de un servicio y modificar de forma segura un ajuste de un servicio con un drop-in.

Conceptos clave: systemd, unit, service, systemctl, start, stop, restart, reload, enable, disable, --now, active, inactive, failed, systemctl --failed, drop-in, systemctl edit, daemon-reload, Restart=

¿Quién mantiene todo en marcha?

En un servidor se ejecutan decenas de programas que deben estar siempre disponibles: el servidor SSH, el servidor web, una base de datos, la sincronización horaria. Estos programas se llaman servicios (services, o daemons). Alguien tiene que iniciarlos al arrancar, vigilarlos y volver a iniciarlos si se caen. En Debian, Ubuntu, AlmaLinux y Rocky Linux, de eso se encarga systemd. Es el primer programa que inicia el kernel (proceso 1) y, a continuación, inicia todo lo demás.

systemd trabaja con units (unidades): descripciones de algo que debe gestionar. Los tipos más importantes:

TipoExtensiónEjemplo
Servicio.servicenginx.service, ssh.service
Temporizador (tarea programada).timerapt-daily.timer (lección 4.2, lección 6.3)
Socket.socketssh.socket en Ubuntu 24.04 y posteriores
Objetivo (grupo de units).targetmulti-user.target

Usted se comunica con systemd mediante el comando systemctl. Puede omitir la extensión .service: systemctl status nginx equivale a systemctl status nginx.service.

Leer el estado

El comando que más utilizará:

anna@web1:~$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Mon 2026-11-09 08:12:44 CET; 3h 2min ago
       Docs: man:nginx(8)
    Process: 902 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 905 (nginx)
      Tasks: 3 (limit: 2275)
     Memory: 4.1M (peak: 6.3M)
        CPU: 213ms
     CGroup: /system.slice/nginx.service
             ├─905 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             └─906 "nginx: worker process"

nov 09 08:12:44 web1 systemd[1]: Starting nginx.service - A high performance web server...
nov 09 08:12:44 web1 systemd[1]: Started nginx.service - A high performance web server...

Léalo de arriba abajo:

  • El punto delante del nombre es verde si el servicio está en marcha, blanco si está detenido y rojo si ha fallado.
  • Loaded indica dónde está el archivo de la unit y si el servicio se inicia al arrancar (enabled) o no (disabled).
  • Active indica si está en marcha ahora (active (running)), si está detenido (inactive (dead)) o si ha fallado (failed), y desde cuándo.
  • Main PID y CGroup muestran qué procesos pertenecen al servicio.
  • Abajo aparecen las últimas líneas del registro del servicio. A menudo ya se ve ahí por qué algo falla; puede leer más con journalctl (lección 6.2).

Iniciar, detener, reiniciar y recargar

anna@web1:~$ sudo systemctl start nginx      # iniciar ahora
anna@web1:~$ sudo systemctl stop nginx       # detener ahora
anna@web1:~$ sudo systemctl restart nginx    # detener y volver a iniciar
anna@web1:~$ sudo systemctl reload nginx     # volver a leer la configuración sin detener

La diferencia entre restart y reload es importante en la práctica. Con un restart, el servicio se detiene un momento: se cortan las conexiones en curso y, si la nueva configuración contiene un error, ya no arranca y su sitio web queda caído. Con un reload, el servicio vuelve a leer su configuración sin dejar de funcionar; si la configuración tiene un error, nginx mantiene la anterior. Por eso, después de cambiar la configuración de nginx, Caddy, SSH o fail2ban, utilice reload y pruebe antes la configuración (nginx -t, sshd -t, fail2ban-client -t). No todos los servicios admiten reload; systemctl reload-or-restart elige por sí mismo.

Al arrancar: enable y disable

Iniciar un servicio y hacer que "se inicie al arrancar" son dos cosas distintas:

anna@web1:~$ sudo systemctl enable nginx         # a partir de ahora se inicia al arrancar
anna@web1:~$ sudo systemctl disable nginx        # ya no se inicia al arrancar
anna@web1:~$ sudo systemctl enable --now nginx   # ambas cosas: iniciar ahora y al arrancar
anna@web1:~$ systemctl is-enabled nginx
enabled

Un error clásico: usted inicia un servicio con start, todo funciona y, tras el siguiente reinicio (por ejemplo, por una actualización del kernel, lección 4.2), ha desaparecido. Por eso, para un servicio nuevo, utilice enable --now.

Si quiere asegurarse de que un servicio no se inicie nunca, ni siquiera cuando otro servicio lo solicite, existe mask: sudo systemctl mask <dienst>. Para deshacerlo, use unmask.

¿Qué está fallando?

Un solo comando muestra todas las units que han fallado:

anna@web1:~$ systemctl --failed
  UNIT                LOAD   ACTIVE SUB    DESCRIPTION
● php8.4-fpm.service  loaded failed failed The PHP 8.4 FastCGI Process Manager

1 loaded units listed.

Conviértalo en un hábito, por ejemplo después de cada reinicio y de cada actualización (lección 4.3): la lista debería estar vacía. Una vez resuelto el problema, elimine el aviso con sudo systemctl reset-failed.

Una vista general de todos los servicios en marcha:

anna@web1:~$ systemctl list-units --type=service --state=running

Si hay algo en marcha que no conoce o no utiliza, averigüe qué es. Todo servicio que no sea necesario es superficie de ataque innecesaria (lección 5.1 y 10.1).

Archivos de unit y drop-ins

Un archivo de unit es un archivo de texto. La versión del paquete está en /usr/lib/systemd/system/ (en sistemas más antiguos, /lib/systemd/system/). Ese archivo no lo modifique nunca: una actualización del paquete lo sobrescribe. Sus propios cambios van en un drop-in: un pequeño archivo que contiene solo las líneas que desea cambiar. Lo más sencillo es hacerlo con:

anna@web1:~$ sudo systemctl edit nginx

Se abre un editor con un espacio vacío entre dos líneas de comentario. Lo que escriba ahí se guarda en /etc/systemd/system/nginx.service.d/override.conf. Por ejemplo: reiniciar nginx automáticamente si se detiene de forma inesperada.

[Service]
Restart=on-failure
RestartSec=5s

Al guardar, systemctl edit recarga automáticamente la configuración de systemd. Si edita un archivo de unit de otra manera, ejecute usted mismo:

anna@web1:~$ sudo systemctl daemon-reload
anna@web1:~$ sudo systemctl restart nginx

daemon-reload hace que systemd vuelva a leer los archivos de unit; después, el propio servicio debe reiniciarse para aplicar el cambio. El resultado completo (original más drop-ins) se ve con systemctl cat nginx.

Restart=on-failure es una buena costumbre para los servicios importantes. Pero no oculte con ello un error real: un servicio que se bloquea cada cinco segundos y vuelve a arrancar debe investigarse en el registro. Tras varios fallos rápidos seguidos, systemd deja de reiniciarlo (el límite predeterminado es de cinco inicios en diez segundos) y marca el servicio como failed.

En AlmaLinux y Rocky Linux

systemd y systemctl funcionan exactamente igual. Solo cambian a veces los nombres de los servicios: el servicio SSH se llama sshd, el servidor web de la distribución se llama httpd (Apache) o nginx, y el firewall firewalld.

En la práctica

El panel de VPS de su proveedor (en WebOké y en otros) permite apagar, reiniciar o realizar un "apagado forzado" de todo el servidor. Esto último equivale a desenchufarlo: los servicios no tienen ocasión de detenerse correctamente y una base de datos puede dañarse. Dentro del servidor, utilice sudo systemctl reboot o sudo shutdown -h now, y en el panel, los botones normales de apagar o reiniciar.

Resumen

  • systemd inicia y vigila todos los servicios; usted lo maneja con systemctl.
  • systemctl status muestra si un servicio está en marcha, si se inicia al arrancar y las últimas líneas del registro.
  • start/stop/restart actúan sobre el momento actual, enable/disable sobre el arranque; utilice enable --now para un servicio nuevo.
  • Tras un cambio de configuración: primero probar, después reload; systemctl --failed debería estar vacío.
  • No modifique nunca el archivo de unit de un paquete; utilice un drop-in con systemctl edit.

Cuestionario

1. Ha iniciado un servicio nuevo con systemctl start. Tras reiniciar el servidor, no está en marcha. ¿Por qué?



2. Ha modificado la configuración de nginx. ¿Cuál es el orden más seguro?



3. ¿Dónde debe ir su propio cambio al archivo de unit de un paquete?



4. systemctl status muestra Loaded: loaded (...; disabled; ...) y Active: active (running). ¿Qué significa?



5. Un servicio tiene Restart=on-failure y se bloquea cada pocos segundos. ¿Cuál es el uso correcto de ese ajuste?



Ejercicio

Ejercicio O6.1: Inventario de sus servicios. Haga en su servidor una lista de todos los servicios en marcha (systemctl list-units --type=service --state=running) y compruebe si systemctl --failed está vacío. Indique para cada servicio qué hace y si lo necesita. Elija un servicio que no conociera y averigüe qué es (systemctl status, man). Después, para un servicio importante, configure Restart=on-failure en un drop-in y compruebe con systemctl cat que está aplicado.

Ejercicio O6.1: Inventario de sus servicios

Este ejercicio lo hace usted mismo; nadie lo revisa. Marque lo que haya hecho y señale el ejercicio como realizado.




Sus marcas y notas se quedan solo en este navegador; no las enviamos a ningún sitio. Si ha iniciado sesión, en Mis cursos solo guardamos que ha realizado el ejercicio.

Para saber más

Un momento…

Configure sus dominios

Configure para cada dominio los servidores de nombres, la vinculación a su hosting y quién será el titular.

Cargando sus dominios…