
Aprenda a utilizar systemctl con --failed Marque para descubrir instantáneamente servicios rotos en su sistema Linux sin tener que desplazarse por cientos de servicios en buen estado.
El servidor empezó a fallar, obviamente algo andaba mal, pero systemctl status Deshazte de un muro de texto que te diga que no hay nada útil. Te desplazas, entrecierras los ojos, te rindes y abres el diario.
La acción más rápida es preguntar. systemd Una pregunta simple, qué servicios realmente fallaron, y responderla en dos líneas en lugar de doscientas.
Cada comando a continuación se prueba ubuntu y LokiLinuxy el comportamiento es el mismo en cualquier distribución moderna de Linux que ejecute systemd versión 230 o superior.
Antes de seguir discutiendo, systemd Sí init Un sistema que inicia su computadora y administra todos los servicios en segundo plano que contiene, y systemctl es el comando que usas para hablar systemd desde la terminal.
¿Qué hace realmente systemctl list-units –failed?
este systemctl list-units El comando enumera cada unidad activa que systemd está rastreando actualmente, donde unidad es solo un nombre para lo que administra systemd, como un servicio, punto de montaje o temporizador.
De forma predeterminada, la lista es larga y ruidosa porque contiene todo lo que funciona bien. este --failed El filtro de etiquetas solo enumera las unidades que se encuentran en un estado fallido, lo que representa servicios que intentaron iniciarse o permanecieron operativos pero no pudieron iniciarse.
Este es el primer comando que ejecutan los administradores de sistemas más experimentados cuando falla un servidor porque responde a la pregunta «¿Qué está roto ahora?«Un golpe.
No le dirá por qué falló ni solucionará nada por sí solo, pero le indicará el nombre exacto del servicio que debe investigar a continuación. Piense en ello como una herramienta de clasificación, no como una herramienta de diagnóstico.
La forma más simple de este comando no requiere parámetros, simplemente escríbalo y lea el resultado.
systemctl list-units --failed
producción:
UNIT LOAD ACTIVE SUB DESCRIPTION ● nginx.service loaded failed failed A high performance web server ● mysql.service loaded failed failed MySQL Community Server LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 2 loaded units listed.
Dos fallas de servicio, nginx y mysqlel punto rojo al principio de cada línea es la forma que tiene systemd de marcarlas visualmente. Si el resultado muestra «Lista 0 unidades cargadas«Sabes muy bien que no se destruyó nada.
si ves Permission deniedte olvidaste sudo prefijo, el comando sudo ejecuta lo que sigue con privilegios de root, y systemd necesita leer el estado completo de la unidad.
Utilice únicamente systemctl para filtrar servicios fallidos
Por defecto --failed Incluye todos los tipos de unidades, enchufes, temporizadores, soportes y servicios combinados. Cuando solo le importe el servicio (lo que suele ser el caso durante una interrupción), agregue --type=service filtrar.
sudo systemctl list-units --failed --type=service
producción:
UNIT LOAD ACTIVE SUB DESCRIPTION ● nginx.service loaded failed failed A high performance web server 1 loaded units listed.
El resultado ahora se limita al servicio fallido, que casi siempre es lo que se desea durante un incidente inmediato. Un error común que cometen los principiantes es escribir --type=services con un s Finalmente, lanza un «Tipo de unidad no válido”está mal, el valor correcto es impar.
Encontrar la causa del fallo del servicio en Linux
Una vez que tenga una lista de servicios fallidos, el siguiente paso es preguntar por qué falló cada servicio. Puede obtener un nombre del manifiesto y ejecutar systemctl status directamente en él, o puede dejar que xargs haga el trabajo y obtenga el estado de cada servicio fallido de una sola vez.
este xargs El comando toma la entrada del lado izquierdo de la tubería y la convierte en parámetros para el comando del lado derecho, que es exactamente lo que necesita cuando la lista de servicios fallidos es dinámica.
sudo systemctl status nginx.service
producción:
× nginx.service - A high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Wed 2026-04-22 09:14:22 UTC; 3min ago
Process: 4821 ExecStartPre=/usr/sbin/nginx -t -q (code=exited, status=1/FAILURE)
Apr 22 09:14:22 web01 nginx[4821]: nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)
La última línea de registro es la respuesta real y el puerto 80 ya está vinculado por otro programa, por eso nginx No se puede empezar. Si la salida de estado trunca la línea de registro, agregue --no-pager -l Texto completo obligatorio, que -l Prevenir elipses y --no-pager Omita el inspector menor que se come el final de la salida.
Encadene cuando fallan varios servicios y desea conocer el estado de cada servicio en una sola ejecución list-units Ingresar xargs y haga que proporcione el nombre a systemctl estado.
Cada parte del oleoducto tiene un trabajo específico:
systemctl list-units --failed --no-legend --plainImprime sólo los nombres de las unidades fallidas y elimina títulos y puntos.awk '{print $1}'Saque solo la primera columna, que es el nombre de la unidad.xargs sudo systemctl status --no-pagerProporcione estos nombres como argumentos parasystemctl statusUna llamada telefónica.
systemctl list-units --failed --no-legend --plain | awk '{print $1}' | xargs sudo systemctl status --no-pager
producción:
× nginx.service - A high performance web server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Wed 2026-04-22 09:14:22 UTC; 3min ago
Process: 4821 ExecStartPre=/usr/sbin/nginx -t -q (code=exited, status=1/FAILURE)
Apr 22 09:14:22 web01 nginx[4821]: nginx: [emerg] bind() to 0.0.0.0:80 failed
× mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; preset: enabled)
Active: failed (Result: exit-code) since Wed 2026-04-22 09:15:01 UTC; 2min ago
Process: 4902 ExecStart=/usr/sbin/mysqld (code=exited, status=1/FAILURE)
Apr 22 09:15:01 web01 mysqld[4902]: [ERROR] Could not open file '/var/log/mysql/error.log'
Dos servicios fallidos reportados en secuencia, conflicto de puerto nginx y registrar problemas de permisos de archivos mysqlque es suficiente para distribuir el trabajo de reparación entre dos miembros del equipo sin tener que volver a ejecutar nada.
Un error común entre los principiantes es omitir --no-pagerlo que hace xargs Cada servicio tiene menos controles manuales y te obliga a presionar q Convierta instrucciones únicas en molestos bucles interactivos entre cada una.
Contando servicios fallidos en Linux
Para las comprobaciones del estado de ejecución y los scripts de supervisión, necesita un número que pueda compararse con cero, no una tabla legible por humanos. usar --no-legend Marcar para eliminar el encabezado y el pie de página y luego canalizar hacia wc -l para contar las filas restantes.
systemctl list-units --failedEnumere las unidades fallidas con encabezados y pies de página completos.--no-legendElimine los encabezados de las columnas y las filas de resumen.--plainSe eliminaron los puntos de estado coloreados para que la salida sea segura para scripts.wc -lCuente el número de filas restantes, una por cada unidad fallida.
systemctl list-units --failed --no-legend --plain | wc -l
producción:
2
Dos unidades averiadas desde las que puedes alertar cronagente de supervisión o script de shell. Un error común entre los principiantes es olvidar --plain y contando los puntos coloreados como parte de la línea, esto todavía funciona para wc -l Pero si luego intentas usar awk para resolver el nombre de la unidad, se romperá.
Mostrar todos los servicios fallidos en Linux
Por defecto, list-units Muestra solo las unidades que systemd está rastreando activamente, excluyendo los servicios que se desinstalaron debido a una falla. añadir --all incluirlos y combinarlos con --state=failed Para el mismo comportamiento de filtro.
sudo systemctl list-units --all --state=failed
producción:
UNIT LOAD ACTIVE SUB DESCRIPTION ● nginx.service loaded failed failed A high performance web server ● mysql.service loaded failed failed MySQL Community Server ● apt-daily-upgrade.timer loaded inactive dead Daily apt upgrade activities
este --all La introducción de unidades cargadas pero inactivas a veces puede ocultar temporizadores atascados o enchufes que dejaron de funcionar silenciosamente. Un error común entre los principiantes es confundir --state=failed y --faileden cuyo caso hacen lo mismo, pero --state= Acepta muchos otros valores como activo, inactivo y activado, por lo que es una opción más flexible una vez que te acostumbras.
systemctl Banderas útiles para recordar
Algunas señales ocurren con tanta frecuencia que vale la pena guardarlas en la memoria muscular para la próxima interrupción.
--no-pagerEnvíe la salida directamente al terminal sin necesidad de tuberíasless.--no-legendElimine el encabezado y el pie de página para un análisis limpio del script.--plainSe eliminaron puntos de estado solo para salida ASCII.--type=serviceFiltre servicios e ignore temporizadores, enchufes y soportes.--state=failedversión explícita--failedtrabajando lado a lado--all.
en conclusión
Ahora sabes cómo hacer preguntas. systemd La pregunta más importante durante una interrupción es qué servicios están realmente rotos; puede limitar la respuesta a solo los servicios, contar las fallas en sus scripts y extraer la causa y el estado completos de la falla.
este --failed flag es la forma más rápida de clasificar un servidor problemático y combinarlo con --no-legend y --plain Cualquier secuencia de comandos de monitoreo se puede insertar de manera segura y sin sorpresas en el posprocesamiento.
Ahora, para probarlo en su propia máquina, abra una terminal y ejecute:
systemctl list-units --failed
Luego, si no ocurren problemas, interrumpa intencionalmente el servicio:
sudo systemctl stop nginx && sudo systemctl start broken-unit-name
Ejecute el comando nuevamente para ver los cambios en la salida inmediatamente. Hacer esto una vez en el cuadro de prueba cambia el comando de algo que lees a algo que recuerdas en tu mano.
¿Lo has usado? systemctl --failed ¿Detectar interrupciones en la producción antes de realizar el seguimiento? ¿Cuál es el fracaso más difícil que has rastreado con él? Háganos saber en los comentarios a continuación.









