Cómo gestionar servicios con systemctl: iniciar, detener y habilitar servicios
¿Qué es systemctl y por qué es tan importante en Linux?
Si has administrado un servidor Linux alguna vez, seguramente has escuchado hablar de systemctl. Esta herramienta es el corazón del sistema de inicio systemd, que es el encargado de arrancar, detener y supervisar los servicios linux en la gran mayoría de distribuciones modernas (Ubuntu, Debian, CentOS, Rocky Linux, etc.).
Piensa en systemctl como el "panel de control" de los servicios de tu servidor. Sin él, tendrías que gestionar procesos manualmente, algo muy tedioso y propenso a errores. Con systemctl, puedes controlar qué servicios se inician al encender el sistema, cuáles se detienen y cómo se comportan ante fallos.
En esta guía completa, te enseñaré paso a paso a dominar los comandos esenciales de systemctl. No necesitas ser un experto: empezaremos desde lo más básico y avanzaremos hasta cubrir las operaciones más comunes que realizarás a diario como administrador de sistemas o propietario de un hosting.
Cómo ver el estado de los servicios con systemctl
Antes de iniciar o detener cualquier servicio, es fundamental saber cómo consultar su estado actual. Esto te ayudará a diagnosticar problemas y a entender qué está pasando en tu sistema.
Ver todos los servicios activos
Para ver una lista de todos los servicios linux que están actualmente en ejecución, usa:
systemctl list-units --type=service --state=running
Este comando te mostrará una tabla con el nombre del servicio, su estado, la descripción y otra información útil.
Ver todos los servicios (activos e inactivos)
Si quieres ver todos los servicios, independientemente de si están activos o no, ejecuta:
systemctl list-units --type=service --all
Consultar el estado de un servicio específico
Para conocer el estado de un servicio concreto, como por ejemplo Apache o Nginx, usa:
systemctl status apache2
O si usas Nginx:
systemctl status nginx
Este comando te dará información valiosa como:
- Si el servicio está activo (running), inactivo (dead) o fallido (failed).
- El PID (identificador de proceso) del servicio.
- La memoria que está consumiendo.
- Los últimos registros de actividad del servicio (logs).
[TIP] Si no recuerdas el nombre exacto del servicio, puedes usar el comando
systemctl list-units --type=service | grep -i "texto"para buscar por nombre parcial.
Iniciar un servicio con systemctl
Cuando necesitas poner en marcha un servicio que está detenido, el comando es muy sencillo.
Comando básico para iniciar
sudo systemctl start nombre-del-servicio
Por ejemplo, para iniciar MySQL:
sudo systemctl start mysql
¿Qué significa "iniciar" un servicio?
Iniciar un servicio significa que systemd lanza el proceso correspondiente y lo mantiene en ejecución hasta que tú lo detengas o el sistema se apague. Es importante que sepas que iniciar no es lo mismo que habilitar.
[INFO] Iniciar solo ejecuta el servicio en este momento. Habilitar (lo veremos más adelante) hace que el servicio se inicie automáticamente al arrancar el sistema.
Verificar que el servicio se inició correctamente
Después de iniciar un servicio, siempre es buena práctica verificar su estado:
sudo systemctl status mysql
Deberías ver algo como Active: active (running) en la salida del comando.
Detener un servicio con systemctl
Detener un servicio es igual de sencillo que iniciarlo. Este comando es útil cuando necesitas aplicar cambios de configuración o liberar recursos del sistema.
Comando básico para detener
sudo systemctl stop nombre-del-servicio
Si tienes un panel de control tipo Syspanel (accesible por defecto en el puerto 2106), también puedes detener servicios desde su interfaz web, pero realmente es mucho más rápido y flexible hacerlo desde la terminal.
Detener un servicio que se ha quedado colgado
A veces, un servicio puede quedarse en un estado extraño y no detenerse correctamente. En ese caso, puedes forzar la detención con:
sudo systemctl kill nombre-del-servicio
Pero antes de usar kill, intenta siempre con stop. Si el servicio no se detiene, puede que haya procesos hijos que no respondan.
[WARNING] Evita usar
killa menos que sea estrictamente necesario. Puede corromper datos si el servicio estaba escribiendo en archivos.
Reiniciar un servicio con systemctl
Reiniciar es una de las operaciones más comunes, especialmente después de modificar archivos de configuración.
Comando básico para reiniciar
sudo systemctl restart nombre-del-servicio
Este comando detiene el servicio y lo vuelve a iniciar inmediatamente. Es útil para aplicar cambios de configuración.
Reiniciar solo si está activo
Si no sabes si el servicio está en ejecución y solo quieres reiniciarlo en caso de que lo esté, puedes usar:
sudo systemctl try-restart nombre-del-servicio
Recargar la configuración sin reiniciar
Algunos servicios permiten recargar su configuración sin necesidad de detenerse por completo. Esto es más eficiente y evita cortes de servicio.
sudo systemctl reload nombre-del-servicio
[TIP] No todos los servicios soportan
reload. Si no está soportado, systemctl te lo indicará y podrás usarrestartcomo alternativa.
Habilitar un servicio para que inicie automáticamente
Este es probablemente el aspecto más importante de la gestión de servicios. Habilitar un servicio significa que systemd lo arrancará automáticamente cuando el sistema se inicie.
Comando básico para habilitar
sudo systemctl enable nombre-del-servicio
Por ejemplo, para que Nginx se inicie al arrancar el sistema:
sudo systemctl enable nginx
Deshabilitar un servicio
Si ya no quieres que un servicio se inicie automáticamente, usa:
sudo systemctl disable nombre-del-servicio
Habilitar y iniciar al mismo tiempo
Si quieres ahorrarte un paso y hacer ambas cosas a la vez, puedes usar:
sudo systemctl enable --now nombre-del-servicio
Este comando habilita el servicio y lo inicia inmediatamente.
[INFO] Cuando habilitas un servicio, systemd crea enlaces simbólicos en los directorios de arranque apropiados. Si deshabilitas el servicio, esos enlaces se eliminan.
Cómo ver si un servicio está habilitado
Para comprobar si un servicio está configurado para iniciarse automáticamente:
systemctl is-enabled nombre-del-servicio
La salida será enabled, disabled o static (los servicios estáticos no se pueden habilitar/deshabilitar manualmente).
También puedes ver el estado completo con:
systemctl status nombre-del-servicio
En la salida, fíjate en la línea que dice Loaded: loaded (/etc/systemd/system/...); ahí verás si está habilitado o no.
Otros comandos útiles de systemctl
Además de los comandos básicos, hay otros que te serán muy útiles en tu día a día.
Ver todos los servicios que fallaron
systemctl --failed
Este comando te muestra todos los servicios que han fallado al iniciar o durante su ejecución. Es una excelente herramienta de diagnóstico.
Recargar la configuración de systemd
Si has creado o modificado archivos de unidades de servicio manualmente, debes recargar la configuración de systemd para que se entere de los cambios:
sudo systemctl daemon-reload
Ver el árbol de dependencias de un servicio
systemctl list-dependencies nombre-del-servicio
Esto te muestra qué otros servicios o unidades dependen del servicio que consultas.
Pausar un servicio sin detenerlo
Existe un comando para congelar un servicio temporalmente:
sudo systemctl freeze nombre-del-servicio
Y para descongelarlo:
sudo systemctl thaw nombre-del-servicio
[WARNING]
freezeythawson comandos avanzados. Úsalos con precaución, ya que pueden dejar el servicio en un estado no deseado si no entiendes bien su comportamiento.
Errores comunes y cómo solucionarlos
"Failed to start service: Unit not found"
Esto significa que el servicio no existe en tu sistema. Puede que el nombre esté mal escrito o que el paquete no esté instalado. Verifica el nombre exacto con systemctl list-units --type=service.
"Permission denied"
Necesitas permisos de superusuario para gestionar servicios. Usa sudo al inicio del comando.
"Job for service failed because the control process exited with error code"
Este es un error genérico. Lo más útil es revisar los logs del servicio para entender qué ha fallado:
sudo journalctl -u nombre-del-servicio -n 50
Este comando te muestra las últimas 50 líneas del log del servicio.
Preguntas frecuentes (FAQ)
¿Cuál es la diferencia entre iniciar y habilitar un servicio?
Iniciar (start) ejecuta el servicio en el momento actual. Habilitar (enable) configura el servicio para que se inicie automáticamente al arrancar el sistema. Son acciones independientes: puedes iniciar sin habilitar, habilitar sin iniciar, o ambas.
¿Cómo sé qué servicios están usando más recursos del sistema?
Puedes usar systemctl status para ver el uso de memoria de cada servicio, pero para un análisis más detallado te recomiendo usar top o htop.
¿Puedo gestionar servicios de mi hosting a través de un panel gráfico?
Sí, si estás usando un panel como Syspanel (recuerda que se accede por el puerto 2106), tendrás una interfaz web para gestionar servicios. Sin embargo, conocer la línea de comandos te da mucho más control y flexibilidad.
¿Qué pasa si un servicio se detiene solo?
Si un servicio se detiene inesperadamente, systemd puede reiniciarlo automáticamente si así lo has configurado en su unidad de servicio. Puedes ver por qué se detuvo con journalctl -u nombre-del-servicio.
¿Es seguro deshabilitar servicios del sistema?
Depende. Algunos servicios son esenciales para el funcionamiento del sistema y deshabilitarlos puede causar problemas. Antes de deshabilitar algo, investiga qué función cumple. Si no estás seguro, es mejor dejarlo habilitado.
Conclusión y mejores prácticas
Dominar systemctl es una habilidad fundamental para cualquier administrador de servicios linux. Con los comandos que has aprendido hoy, podrás:
- Iniciar y detener servicios cuando lo necesites.
- Habilitar servicios para que arranquen automáticamente.
- Diagnosticar problemas con el estado y los logs.
- Reiniciar servicios después de cambios de configuración.
Recomendaciones finales:
- Usa
systemctl statuscon frecuencia para conocer el estado real de tus servicios. - No habilites servicios que no necesitas para reducir la superficie de ataque y liberar recursos.
- Revisa los logs (
journalctl) cuando algo falle; casi siempre te darán la pista para solucionarlo. - Prueba los comandos en un entorno de desarrollo antes de aplicarlos en producción.
Si estás gestionando un servidor con Syspanel, recuerda que puedes combinar la interfaz web (puerto 2106) con la línea de comandos para obtener lo mejor de ambos mundos.
Ahora ya tienes el conocimiento necesario para gestionar servicios como un profesional. ¡Ponlo en práctica y verás que en poco tiempo te sentirás completamente cómodo con systemctl!
