Gestionar servicios con systemctl en su VPS
En su VPS se ejecutan programas que deben estar siempre disponibles: el servidor SSH, un servidor web, una base de datos. Estos programas se llaman servicios. En Debian, Ubuntu, AlmaLinux y Rocky Linux, systemd los inicia y los supervisa, y usted controla systemd con el comando systemctl. Estos son los comandos que necesitará con más frecuencia.
El estado de un servicio
systemctl status nginx
Puede omitir la extensión .service. Lea la salida de arriba abajo:
- El punto delante del nombre es verde si el servicio está en ejecución, blanco si está detenido y rojo si ha fallado.
- Loaded indica si el servicio se inicia al arrancar (
enabled) o no (disabled). - Active indica si está en ejecución ahora (
active (running)), si está detenido (inactive (dead)) o si ha fallado (failed), y desde cuándo. - Al final aparecen las últimas líneas del registro del servicio. A menudo ya se ve ahí por qué algo falla.
Iniciar, detener y recargar
| Comando | Qué hace |
|---|---|
sudo systemctl start nginx | Iniciar ahora |
sudo systemctl stop nginx | Detener ahora |
sudo systemctl restart nginx | Detener y volver a iniciar |
sudo systemctl reload nginx | Volver a leer la configuración sin detener el servicio |
La diferencia entre restart y reload es importante. Con un restart el servicio se detiene un momento y, si la nueva configuración contiene un error, ya no vuelve a iniciarse y su sitio web queda caído. Con un reload el servicio sigue en ejecución; si hay un error, nginx mantiene la configuración anterior. Por eso, pruebe primero la configuración (sudo nginx -t, sudo sshd -t) y utilice después reload. No todos los servicios admiten reload; sudo systemctl reload-or-restart elige por sí mismo.
Al arrancar: enable y disable
Iniciar un servicio e "iniciarlo al arrancar" son dos cosas distintas. Si inicia un servicio solo con start, después del siguiente reinicio, por ejemplo por una actualización del kernel, ya no estará en ejecución.
| Comando | Qué hace |
|---|---|
sudo systemctl enable --now nginx | Iniciar ahora y, a partir de ahora, también al arrancar. Utilice esto para un servicio nuevo |
sudo systemctl disable --now nginx | Detener ahora y no volver a iniciarlo al arrancar |
systemctl is-enabled nginx | Muestra si el servicio se inicia al arrancar |
¿Qué falla? ¿Y qué está en ejecución?
systemctl --failed
Esto muestra todos los servicios que han fallado. La lista debería estar vacía. Revísela después de cada reinicio y de cada actualización. Una vez resuelto el problema, elimine el aviso con sudo systemctl reset-failed.
systemctl list-units --type=service --state=runningmuestra todos los servicios en ejecución. Si no conoce alguno, averigüe qué hace. Un servicio que no necesita es una puerta de entrada innecesaria.systemctl list-timersmuestra las tareas programadas de systemd, con la última vez que se ejecutaron y cuándo volverán a ejecutarse. Así puede comprobar, por ejemplo, si funcionan los temporizadores de las actualizaciones automáticas o de la renovación de certificados.
Los registros de un servicio
Si desea ver más que las pocas líneas de systemctl status, utilice journalctl:
sudo journalctl -u nginx --since "1 hour ago" sudo journalctl -u nginx -p err -b
El primero muestra todo lo de nginx de la última hora; el segundo, solo los errores desde el último reinicio. Encontrará más comandos en Leer registros con journalctl y docker logs.
Modificar la configuración de un servicio
Nunca modifique el archivo unit de un paquete (en /usr/lib/systemd/system/), porque una actualización lo sobrescribe. Utilice sudo systemctl edit nginx: crea un pequeño archivo con solo sus cambios y hace que systemd lo vuelva a leer. Con systemctl cat nginx verá la configuración que finalmente se aplica.
sudo systemctl reboot, o con Reiniciar en la pantalla del VPS. Un apagado forzado equivale a desenchufar el equipo: los servicios no tienen ocasión de detenerse correctamente y una base de datos puede dañarse. Consulte La pantalla del VPS: encendido y apagado, gráficos, sistema y registro.En AlmaLinux y Rocky Linux, systemctl funciona exactamente igual, solo que algunos servicios tienen otro nombre: el servicio SSH se llama allí sshd en lugar de ssh, Apache se llama httpd y el cortafuegos firewalld.
¿Desea aprender más? Siga el curso gratuito VPS y administración de servidores Linux, lección 6.1 Gestionar servicios con systemd o lección 6.2 Leer registros con journalctl.
