Cómo usar systemctl en Linux: Guía completa para listar y gestionar servicios

目次

1. Introducción

Al usar Linux, a menudo surge la necesidad de “verificar el estado de un servicio” o “consultar la lista de procesos en ejecución”. En esos casos, el comando systemctl resulta muy útil.

Este comando está vinculado a systemd, el sistema de inicio y gestor de servicios en Linux, y ofrece una amplia gama de funciones: verificar el estado de los servicios (unidades), iniciarlos, detenerlos, reiniciarlos y mostrarlos en una lista.

En particular, desde la perspectiva de “listar con systemctl”, no solo es posible ver los servicios activos, sino también aquellos deshabilitados, los configurados para inicio automático y más, lo que permite tener una visión completa de la configuración.

En este capítulo, primero resumiremos de manera sencilla qué es systemctl y explicaremos qué aprenderás en este artículo.

¿Qué es systemctl?

systemctl es la herramienta estándar para controlar y verificar diversas “unidades” (servicios, objetivos, puntos de montaje, etc.) en distribuciones Linux basadas en systemd.

Por ejemplo, se usa para iniciar o detener servicios como Apache (httpd) o SSH, así como para mostrar sus estados en una lista.

Relación entre systemd y systemctl

systemd es el núcleo del proceso de inicio y la gestión de servicios en Linux, reemplazando a sistemas más antiguos como “SysVinit” o “Upstart”. El comando que permite interactuar con systemd desde la terminal es systemctl.

En otras palabras, si systemd es el “centro de control”, systemctl actúa como el “operador” que ejecuta sus órdenes.

Qué aprenderás en este artículo

En este artículo encontrarás respuestas a preguntas como:

  • ¿Cómo verificar la lista de servicios en ejecución actualmente?
  • ¿Cómo mostrar todos los servicios, incluso los inactivos?
  • ¿Cómo comprobar si un servicio está configurado para inicio automático?
  • ¿Cómo interpretar los resultados listados?

El artículo incluye ejemplos de comandos y explicaciones claras de sus salidas para que incluso principiantes en Linux puedan entenderlos fácilmente. ¡Acompáñanos hasta el final!

年収訴求

2. Cómo mostrar la lista de servicios con systemctl

En la administración de sistemas Linux, identificar rápidamente la lista de servicios es muy importante. Con el comando systemctl, no solo puedes comprobar los servicios activos, sino también los inactivos y su configuración de inicio automático.

A continuación, explicamos cómo listar los servicios desde tres enfoques principales:

  • Lista de servicios activos
  • Lista de todos los servicios (incluidos los inactivos)
  • Lista de archivos de unidad de servicio (incluyendo configuración de inicio)

2.1 Mostrar la lista de servicios activos

La forma más básica de usar este comando es consultar los servicios que están actualmente “en ejecución” en el sistema. Para ello:

systemctl list-units --type=service

Este comando muestra los servicios activos. La salida incluye los siguientes campos:

CampoSignificado
UNITNombre del servicio (ej: ssh.service)
LOADIndica si el archivo de unidad está cargado
ACTIVEEstado general del servicio (ej: active, inactive, failed)
SUBEstado más detallado (ej: running, exited, dead)
DESCRIPTIONDescripción del servicio

Con esta información puedes comprobar, por ejemplo, si nginx está en funcionamiento o qué servicios están activos actualmente.

2.2 Mostrar todos los servicios, incluidos los inactivos

Por defecto, list-units solo muestra los servicios activos. Si quieres ver también los inactivos, añade la opción --all:

systemctl list-units --type=service --all

Con esta opción, la lista incluirá servicios en estado “inactive” o incluso aquellos que nunca se han iniciado.

Si deseas filtrar aún más, puedes usar la opción --state= para mostrar únicamente servicios en un estado específico.

systemctl list-units --type=service --state=inactive

De esta forma puedes, por ejemplo, listar solamente los servicios detenidos.

2.3 Consultar la lista de archivos de unidad de servicio

Si además de saber el estado actual quieres comprobar qué servicios están habilitados para arrancar automáticamente, utiliza el siguiente comando:

systemctl list-unit-files --type=service

Este comando muestra todos los archivos de unidad de servicio (archivos .service) y su estado de habilitación (enabled/disabled, etc.).

Valor de STATESignificado
enabledSe activa automáticamente al inicio
disabledNo se inicia al arranque; requiere inicio manual
staticDepende de otras unidades; no puede habilitarse o deshabilitarse directamente
maskedEstá deshabilitado explícitamente y no puede iniciarse (bloqueado)

Esto permite identificar qué servicios arrancan con el sistema y si alguno ha sido bloqueado accidentalmente.

3. Operaciones básicas de gestión de servicios con systemctl

El comando systemctl no solo sirve para verificar estados, sino también para iniciar, detener, reiniciar y configurar servicios. Aquí veremos las operaciones más comunes para la administración diaria de servidores.

3.1 Iniciar un servicio

Para iniciar un servicio manualmente:

sudo systemctl start nombre-del-servicio

Ejemplo:

sudo systemctl start httpd.service

Esto inicia el servicio de inmediato, pero si quieres que se mantenga activo tras reiniciar el sistema, también debes usar enable.

3.2 Detener un servicio

Para detener un servicio en ejecución:

sudo systemctl stop nombre-del-servicio

Ejemplo:

sudo systemctl stop sshd.service

El servicio permanecerá detenido hasta que se ejecute nuevamente start.

3.3 Reiniciar un servicio

Cuando se aplican cambios de configuración, es útil reiniciar un servicio:

sudo systemctl restart nombre-del-servicio

Ejemplo:

sudo systemctl restart nginx.service

Esto detiene el servicio y lo vuelve a iniciar en un solo paso.

3.4 Consultar el estado de un servicio

Para ver información detallada de un servicio:

systemctl status nombre-del-servicio

Ejemplo:

systemctl status mysql.service

El resultado incluye estado activo, PID del proceso y registros recientes, muy útil para diagnosticar problemas.

3.5 Habilitar el inicio automático de un servicio

Si quieres que un servicio arranque automáticamente con el sistema, usa:

sudo systemctl enable nombre-del-servicio

Ejemplo:

sudo systemctl enable docker.service

3.6 Deshabilitar el inicio automático

Para evitar que un servicio arranque automáticamente:

sudo systemctl disable nombre-del-servicio

Ejemplo:

sudo systemctl disable cups.service

3.7 Verificar si un servicio está habilitado

Para comprobar si un servicio está configurado para inicio automático:

systemctl is-enabled nombre-del-servicio

Ejemplo de salida:

enabled

Esto permite confirmar rápidamente la política de arranque de un servicio.

4. Opciones útiles y técnicas avanzadas de systemctl

El comando systemctl no solo sirve para operaciones básicas como iniciar o detener servicios, sino también para tareas más avanzadas y útiles. A continuación, se presentan algunas funciones adicionales que pueden hacer la administración de servicios en Linux más eficiente.

4.1 Listar las dependencias de un servicio

En Linux, muchos servicios dependen de otros para funcionar. Para ver esas dependencias, utiliza:

systemctl list-dependencies nombre-del-servicio

Ejemplo:

systemctl list-dependencies nginx.service

Esto muestra en estructura jerárquica las unidades relacionadas, lo que ayuda a entender el orden de arranque y el impacto de cada servicio.

4.2 Mostrar el contenido de un archivo de unidad

Si quieres ver la configuración exacta de un servicio, puedes consultar el archivo de unidad con:

systemctl cat nombre-del-servicio

Ejemplo:

systemctl cat ssh.service

Este comando muestra la ruta y el contenido del archivo .service cargado, permitiendo verificar personalizaciones o configuraciones aplicadas.

4.3 Recargar los archivos de unidad

Cuando se modifican manualmente archivos de unidad, es necesario recargar systemd para aplicar los cambios. Esto se hace con:

sudo systemctl daemon-reexec

O de manera más común:

sudo systemctl daemon-reload

Esto obliga a systemd a releer los archivos de configuración. Si notas que un cambio no surte efecto, este es el primer paso a probar.

4.4 Consultar los registros de un servicio (nota adicional)

Aunque systemctl no gestiona directamente los registros, puedes ver los logs relacionados con un servicio usando journalctl:

journalctl -u nombre-del-servicio

Ejemplo:

journalctl -u docker.service

Esto muestra errores de arranque, reinicios e historial de ejecución, información esencial para resolver problemas.

5. Problemas frecuentes y cómo resolverlos

Al gestionar servicios con systemctl, es posible que encuentres errores o comportamientos inesperados. En este capítulo veremos los problemas más comunes y cómo solucionarlos paso a paso.

5.1 Cuando un servicio no inicia

Si al intentar iniciar un servicio aparece un error como este:

Job for apache2.service failed because the control process exited with error code.
See "systemctl status apache2.service" and "journalctl -xe" for details.

Debes seguir esta secuencia de verificación:

  1. Comprobar el estado del servicio
   systemctl status nombre-del-servicio
  1. Revisar los registros de error
   journalctl -xe
  1. Recargar los archivos de unidad
    Si acabas de modificar configuraciones:
   sudo systemctl daemon-reload
  1. Comprobar conflictos de puertos
    Verifica si otro proceso usa el mismo puerto:
   sudo netstat -tulnp | grep número-de-puerto

5.2 Cómo leer los mensajes de error con status

El comando systemctl status no solo muestra el estado, también incluye los últimos mensajes del registro. Ejemplo:

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled)
   Active: failed (Result: exit-code) since Fri 2025-04-18 12:00:00 JST; 5s ago
  Process: 12345 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=1/FAILURE)

Aquí podemos ver “Active: failed” y “status=1/FAILURE”, lo que indica claramente que el servicio falló. Además, en la línea “Loaded” aparece la ruta del archivo de unidad, útil para editar y corregir configuraciones.

5.3 Cuando un servicio se detiene automáticamente

Si un servicio arranca pero se detiene poco después, las causas más probables son:

  • Errores en el archivo de configuración
  • Conflicto de puertos
  • Falta de archivos o directorios necesarios
  • Permisos insuficientes

En estos casos, las soluciones recomendadas son:

  • Revisar y validar la configuración con comandos como nginx -t o apachectl configtest
  • Analizar registros con journalctl -u nombre-del-servicio
  • Verificar directorios (ejemplo: /var/run/xxx) y crearlos si faltan

5.4 Cuando un servicio está en estado masked

Si al ejecutar systemctl start aparece el siguiente error:

Failed to start example.service: Unit example.service is masked.

Esto significa que el servicio está en estado masked (bloqueado). Para desbloquearlo:

sudo systemctl unmask nombre-del-servicio

Después de eso, podrás iniciarlo normalmente con start.

6. Conclusión

La gestión de servicios en Linux es una de las tareas más importantes en la administración diaria de sistemas. El comando systemctl desempeña un papel central, ya que permite listar, controlar y supervisar servicios para tener siempre una visión clara del sistema.

En este artículo, usando la palabra clave “systemctl lista”, hemos explicado los siguientes puntos:

Lo que puedes hacer con systemctl (resumen)

  • Ver listas de servicios
  • Mostrar servicios activos (list-units --type=service)
  • Incluir servicios inactivos (--all o --state=)
  • Consultar archivos de unidad y su estado de arranque (list-unit-files)
  • Operaciones básicas
  • Iniciar, detener, reiniciar y comprobar estado (start / stop / restart / status)
  • Configurar inicio automático (enable / disable / is-enabled)
  • Operaciones avanzadas y resolución de problemas
  • Ver dependencias, mostrar archivos de unidad, recargar configuraciones
  • Analizar errores mediante registros (journalctl) y estado

Buenas prácticas en la gestión de servicios

  • Verificar estado antes de operar (siempre revisar con status)
  • Comprobar inicio automático (is-enabled)
  • Ejecutar daemon-reload tras cambios de configuración
  • Consultar registros con journalctl en caso de errores

En la administración de Linux, estas prácticas sistemáticas ayudan a mantener servicios estables y a reducir el tiempo de resolución de incidencias.

Para seguir aprendiendo

Si quieres profundizar más, te recomendamos explorar:

  • Los “targets” de systemd (comparación con runlevels)
  • Uso de systemd-timer para programar tareas
  • Cómo crear y gestionar archivos de unidad personalizados

7. Preguntas frecuentes (FAQ)

A continuación, resolvemos dudas comunes sobre systemctl y la gestión de servicios.

Q1. ¿Cuál es la diferencia entre systemctl y el comando service?

A1.
systemctl es el comando estándar en sistemas basados en systemd (Ubuntu, CentOS, Fedora, etc.).
En cambio, service pertenece al sistema SysVinit, usado en versiones antiguas. Aunque a veces se mantiene por compatibilidad, en entornos modernos se recomienda usar systemctl.

Q2. ¿En qué se diferencian list-units y list-unit-files?

A2.

  • list-units: muestra las unidades cargadas actualmente (activas o que se usaron en la sesión).
  • list-unit-files: muestra todos los archivos de unidad disponibles y su estado (enabled, disabled, etc.).

En resumen: el primero muestra “lo que está funcionando ahora” y el segundo “la configuración definida”.

Q3. ¿Se puede iniciar un servicio en estado static?

A3.
Sí, un servicio en estado static se puede iniciar manualmente con start. Sin embargo, no se puede habilitar con enable, porque está diseñado para arrancar solo como dependencia de otros servicios.

Q4. No puedo iniciar un servicio porque está en estado masked. ¿Qué hago?

A4.
Un servicio en estado masked está completamente bloqueado. Para habilitarlo de nuevo:

sudo systemctl unmask nombre-del-servicio

Después, podrás iniciarlo con start.

Q5. ¿Existe alguna forma de ver servicios en una interfaz gráfica?

A5.
Sí, dependiendo de la distribución puedes usar herramientas como gnome-system-monitor, KSysGuard o Cockpit. Sin embargo, para operaciones avanzadas (habilitar, deshabilitar, diagnosticar) lo más seguro sigue siendo systemctl.

Q6. Quiero crear un archivo de unidad propio. ¿Dónde lo guardo?

A6.
Normalmente, se colocan en /etc/systemd/system/. Después de crearlo o editarlo, ejecuta:

sudo systemctl daemon-reload

Así el nuevo archivo quedará registrado y podrás gestionarlo con start, enable, etc.

侍エンジニア塾