Cómo gestionar servicios con systemctl (start, stop, enable, status)
¿Qué es systemctl y por qué es tan importante?
Si alguna vez has tenido que gestionar servicios linux, probablemente hayas escuchado hablar de systemctl. Es la herramienta principal para controlar el sistema de init systemd, que es el encargado de arrancar, detener y supervisar todos los procesos y servicios en la mayoría de las distribuciones modernas de Linux (como Ubuntu, Debian, CentOS, Rocky Linux, etc.).
Piensa en systemctl como el "panel de control" de tu servidor. Sin él, tendrías que reiniciar todo el sistema para aplicar un cambio de configuración, o no podrías detener un servicio que está consumiendo demasiados recursos. Con este comando, puedes iniciar servicio linux, detenerlo, reiniciarlo, configurarlo para que arranque automáticamente y ver su estado en tiempo real.
En este artículo, vamos a desglosar los comandos más esenciales: start, stop, enable y status. Pero no te preocupes, lo haremos paso a paso, con ejemplos claros y consejos prácticos para que, aunque seas nuevo en esto, termines sintiéndote como un administrador de sistemas profesional.
[INFO] Aunque hoy nos centramos en los comandos básicos,
systemctltiene muchísimas más opciones. Al final del artículo te dejaremos algunas pistas para que sigas explorando.
Primeros pasos: cómo funciona systemctl
Antes de lanzarnos a ejecutar comandos, es importante entender la lógica detrás de systemctl. Los servicios en systemd se definen mediante unidades. Una unidad es un archivo de texto con extensión .service que contiene las instrucciones de cómo debe ejecutarse el programa.
Estas unidades se almacenan en directorios específicos del sistema, normalmente en /etc/systemd/system/ (para servicios creados por el administrador) o en /lib/systemd/system/ (para los que vienen con el paquete instalado).
Cuando ejecutas systemctl, le estás diciendo a systemd que realice una acción sobre una de estas unidades. La sintaxis general es:
systemctl [acción] [nombre-del-servicio.service]
Aunque, por comodidad, puedes omitir la extensión .service en la mayoría de los casos. Por ejemplo, systemctl start nginx y systemctl start nginx.service son equivalentes.
[TIP] Para ver todos los servicios que tienes en tu sistema, ejecuta
systemctl list-units --type=service. Verás una lista con su estado actual (activo, inactivo, fallido) y una descripción.
Ver el estado de un servicio: systemctl status
El comando status es tu mejor amigo cuando necesitas diagnosticar problemas. Te muestra información detallada sobre un servicio específico, incluyendo si está activo, su PID (identificador de proceso), cuánta memoria está usando, y los últimos mensajes de registro (logs).
Para usarlo, simplemente escribe:
systemctl status nginx
La salida se verá algo así (aunque variará según tu sistema):
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2025-03-10 10:15:32 UTC; 2h 30min ago
Main PID: 1234 (nginx)
Tasks: 3 (limit: 2319)
Memory: 5.0M
CPU: 15ms
CGroup: /system.slice/nginx.service
├─1234 nginx: master process /usr/sbin/nginx
└─1235 nginx: worker process
Interpretando la salida de status
Vamos a desglosar los campos más importantes:
- Loaded: Te dice si el servicio está configurado para arrancar al inicio del sistema (enabled) o no (disabled). También te muestra la ruta del archivo de unidad.
- Active: Este es el estado actual. Puedes ver
active (running)si está funcionando,inactive (dead)si está detenido, ofailedsi se encontró con un error. - Main PID: El proceso principal del servicio. Útil para hacer seguimiento o matar el proceso si es necesario.
- Memory/CPU: Consumo de recursos en tiempo real.
- CGroup: Muestra los procesos hijos que dependen del servicio principal.
[WARNING] Si ves
Active: failed, significa que el servicio no pudo iniciarse correctamente. Revisa los logs conjournalctl -u nginxpara encontrar el error exacto. No ignores este estado, ya que puede indicar problemas de configuración o dependencias rotas.
Iniciar un servicio con systemctl start
El comando start es el más básico: le ordena a systemd que arranque el servicio. Si el servicio ya está en ejecución, no hará nada (pero no te dará error, solo te lo indicará).
systemctl start nginx
Después de ejecutarlo, no verás ningún mensaje de confirmación si todo salió bien. Para verificar que efectivamente está corriendo, usa systemctl status nginx o simplemente prueba acceder al servicio (por ejemplo, abriendo la página web si es nginx).
[TIP] Si el servicio no inicia, no te quedes solo con el mensaje de error. Ejecuta
systemctl status nginxpara ver el estado exacto yjournalctl -u nginxpara ver los logs. El 90% de las veces, el problema está en un archivo de configuración con errores de sintaxis.
Detener un servicio con systemctl stop
De manera simétrica, stop detiene el servicio de forma ordenada. systemd envía una señal de terminación al proceso principal y espera a que cierre correctamente.
systemctl stop nginx
Después de ejecutarlo, el servicio pasará a estar inactive (dead). Ten en cuenta que si el servicio tiene procesos hijos que no responden correctamente, el comando podría tardar unos segundos.
[WARNING] Si necesitas detener un servicio de forma forzada (porque está colgado), puedes usar
systemctl kill nginx. Pero ten cuidado: esto envía una señal SIGKILL que no permite al servicio hacer una limpieza adecuada. Úsalo solo como último recurso.
Reiniciar un servicio: systemctl restart
Este comando combina stop y start en uno solo. Es perfecto cuando has modificado un archivo de configuración y quieres que el servicio aplique los cambios sin tener que apagarlo manualmente.
systemctl restart nginx
Este comando es más elegante que hacer stop y start por separado, porque systemd maneja las dependencias internas y se asegura de que el reinicio sea limpio.
[TIP] Existe también
systemctl reloadque, en lugar de reiniciar el proceso, solo recarga la configuración. Es mucho más rápido y no interrumpe el servicio. Sin embargo, no todos los servicios soportanreload. Para saber si tu servicio lo soporta, ejecutasystemctl status nginxy busca la línea "Reload" en la descripción.
Activar el arranque automático: systemctl enable
Uno de los errores más comunes en servidores es configurar un servicio para que funcione, pero olvidar que debe arrancar automáticamente cuando el sistema se reinicie. Imagina que tienes una base de datos que no se levanta después de un corte de luz: sería un desastre.
Para evitar esto, usamos enable. Este comando crea los enlaces simbólicos necesarios para que el servicio se inicie automáticamente al arrancar el sistema operativo.
systemctl enable nginx
La salida típica será algo como:
Synchronizing state of nginx.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable nginx
Desactivar el arranque automático: systemctl disable
Si por alguna razón ya no quieres que un servicio arranque solo al inicio del sistema (por ejemplo, si vas a migrarlo a otro servidor), usa disable:
systemctl disable nginx
[INFO] Es importante entender que
enableydisableno afectan al estado actual del servicio. Si el servicio está corriendo, seguirá corriendo. Solo afectan al comportamiento en el próximo arranque del sistema.
La combinación perfecta: enable --now
En la práctica, es muy común que quieras iniciar un servicio y además configurarlo para que arranque automáticamente. En lugar de ejecutar dos comandos, puedes combinarlos con la opción --now:
systemctl enable --now nginx
Este comando hace dos cosas a la vez: arranca el servicio inmediatamente y lo configura para que se inicie en el próximo arranque del sistema. Es una forma muy eficiente de trabajar.
[TIP] Si estás usando un panel de control como Syspanel (que se accede por el puerto 2106), muchos de estos comandos se gestionan desde su interfaz web. Sin embargo, entender cómo funcionan por debajo te ayudará a diagnosticar problemas mucho más rápido.
Lista completa de servicios: systemctl list-units
A veces necesitas ver todos los servicios que están activos, inactivos o fallidos en tu sistema. Para eso, usa:
systemctl list-units --type=service
Puedes filtrar por estado:
systemctl list-units --type=service --state=running
systemctl list-units --type=service --state=failed
Este último comando es especialmente útil para detectar servicios que han fallado silenciosamente. Te sorprendería cuántos problemas se pueden evitar simplemente revisando esta lista de vez en cuando.
Comandos avanzados que te harán la vida más fácil
Aunque no son parte del título, hay dos comandos que consideramos esenciales para cualquier administrador de sistemas:
systemctl is-active
Este comando te devuelve solo el estado activo o inactivo, sin toda la información extra. Es perfecto para scripts:
systemctl is-active nginx
La salida será active o inactive. Ideal para automatizaciones.
systemctl is-enabled
De manera similar, te dice si el servicio está configurado para arrancar al inicio:
systemctl is-enabled nginx
La salida será enabled o disabled.
Solución de problemas comunes (FAQ)
¿Por qué mi servicio no inicia?
El primer paso siempre es revisar los logs con journalctl -u nombre-servicio. Busca líneas de error o advertencias. Los problemas más comunes son:
- Errores de sintaxis en archivos de configuración.
- Puertos ocupados por otro servicio.
- Permisos incorrectos en directorios o archivos.
- Faltan dependencias (por ejemplo, un servicio de base de datos que no está corriendo).
¿Cómo reinicio un servicio que está fallando constantemente?
Si un servicio entra en un bucle de reinicios (estado failed), puedes desactivar el reinicio automático con:
systemctl reset-failed nginx
Esto limpia el contador de fallos y te permite intentar iniciarlo de nuevo desde cero.
¿Qué significa el estado "activating (auto-restart)"?
Esto indica que el servicio se está reiniciando automáticamente después de un fallo. Si ves este estado, significa que hay un problema subyacente que debes investigar. No lo ignores.
¿Cómo hago que un servicio ignore los fallos y siga intentando?
Por defecto, systemd reintenta los servicios que fallan. Puedes controlar este comportamiento editando el archivo de unidad del servicio y modificando las directivas Restart y RestartSec. Pero esto ya es un tema más avanzado.
Conclusión y siguientes pasos
Dominar systemctl es una de las habilidades más importantes para cualquier persona que administre servidores Linux. Con los comandos start, stop, enable y status, ya tienes una base sólida para gestionar servicios linux de manera efectiva.
A medida que te sientas más cómodo, te recomendamos explorar:
systemctl edit: para modificar unidades de servicio sin editar archivos directamente.systemctl mask: para impedir que un servicio se inicie incluso manualmente.systemctl daemon-reload: para que systemd recargue los archivos de configuración después de editarlos.
Recuerda que la práctica hace al maestro. No tengas miedo de experimentar en un entorno de pruebas (por ejemplo, una máquina virtual) antes de aplicar cambios en producción.
[WARNING] Nunca ejecutes
systemctl stopen servicios críticos del sistema (comonetwork,sshdosystemd-journald) sin saber exactamente lo que estás haciendo. Podrías dejar tu servidor inaccesible de forma remota.
[TIP] Si estás usando Syspanel, el panel de control que se accede por el puerto 2106, la gestión de servicios es mucho más visual. Pero ahora que entiendes los comandos subyacentes, podrás resolver problemas incluso cuando la interfaz web no esté disponible.
Esperamos que este artículo te haya sido de gran ayuda. Si tienes alguna duda, no dudes en consultar la documentación oficial de systemd (man systemctl) o dejarnos tu pregunta en los comentarios. ¡Buena suerte con tus servidores!
