Estoy buscando una manera de obtener una lista de todos los servicios (/etc/init.d o upstart o systemd), que se supone que están iniciando (o que se han iniciado desde) el arranque.
¿Cómo se obtiene una lista de todos los servicios iniciales? - Conozco esa pregunta, y sugiere usarla service --status-all
.
Pero eso no me muestra, qué servicios se supone que SE EJECUTAN . Llama a todos los scripts de inicio con " status
" argumento. Esta es una lista de todos los servicios que podrían estar ejecutándose.
Pero me gustaría saber, si un servicio, que se había iniciado en el arranque, todavía se está ejecutando.
Ejemplo…
Tengo instalado webfs. Pero no quiero que se ejecute en el arranque. Por lo tanto he deshabilitado que: sudo update-rc.d webfs disable
. Y también tengo samba instalada y debería estar ejecutándose en el arranque. Pero se detiene (por cualquier razón). sudo service --status-all
no me ayuda aquí:
$ sudo service --status-all 2>/dev/null | grep -E 'samba$|webfs'
[ - ] samba
[ - ] webfs
Ambos están apagados, pero no tengo ni idea, se supone que ese (samba) está encendido.
Entonces…
¿Cómo podría obtener una lista de todos los servicios que comienzan en el arranque? Y, como extensión, ¿hay una manera fácil de obtener el "estado" de estos servicios (si no, simplemente recorreré esta lista y ejecutaré "service $ service status", o algo así).
Gracias alexander
Editar 2015-05-04: Estoy en Ubuntu 14.04.
El enfoque principal de esta pregunta es el siguiente:
Pero me gustaría saber, si un servicio, que se había iniciado en el arranque, todavía se está ejecutando.
Debido a esto, initctl list
no ayuda mucho. Realmente no tiene en cuenta los servicios iniciados por /etc/init.d
scripts (en comparación con los scripts de inicio /etc/init
).
También una lista de /etc/rc?.d/S*
no ayuda. Generaría una lista de servicios, que podrían haberse iniciado en un determinado nivel de ejecución. No me muestra si un servicio que debería haberse iniciado todavía se está ejecutando.
Básicamente, estoy buscando algo como svcs -x
Solaris para Ubuntu. Con svcs -x
, tendría salida si un servicio, que se inició, ya no se ejecuta. Esto, también lo necesitaría para Ubuntu.
Motivo: Me gustaría tener una comprobación genérica (más o menos ...) para nuestro sistema de monitoreo Icinga / Nagios, que me alertaría, si un servicio ya no se está ejecutando, que debería estar ejecutándose. Como tenemos muchos servidores diferentes para muchos clientes diferentes, en realidad no se escala para definir una lista de servicios "importantes".
fuente
initctl list
qué enumera los procesos que se inician / ejecutan, pero esa lista también incluiría los procesos que se inician manualmenteinitctl list
. Pero eso realmente no responde, ya que también mostraría servicios iniciados manualmente. Y no muestra servicios que no se están ejecutando.Respuestas:
Todos los servicios comienzan en el inicio:
Lista de todos los servicios que existen en el sistema:
fuente
Aquí está mi línea
grep -i 'runlevel' /etc/init/* | awk '!/#/ && /start on/ && /2/ {gsub("/"," "); print $0 }' | cut -d ' ' -f4-
Se puede lograr una salida un poco más limpia con
grep -i 'runlevel' /etc/init/* | awk '/start on/ && /2/ {gsub("/"," "); gsub(":", " ");gsub(".conf"," "); print $3 }'
Ahora entremos en detalles. Todos los trabajos iniciales se almacenan
/etc/init/
, ¿verdad? Todos los trabajos tienen líneas que indican en qué nivel de ejecución comienzan. Runlevel 2 es un arranque normal, nivel de ejecución predeterminado. Entonces, si seleccionamos todas las líneas que dicenrunlevel
y limpiamos la salida de grep con awk para que coincida solo con las líneasstart on
y el nivel de ejecución # 2, obtenemos la lista de trabajos iniciales. El resto es solo para las necesidades de formateo, reemplazar / en los nombres de archivos al espacio y cortar la ruta a esos archivos, dejando los nombres de los archivos.La
!/#/
parte es para abordar las directivas de inicio posiblemente comentadas, que personalmente había agregado manualmente.Entre otras cosas, es
/etc/rc2.d
donde (si lo entiendo correctamente) tiene secuencias de comandos de menor prioridad.Una línea cruda para eso es:
ls /etc/rc2.d/* | grep S | awk '{sub("S"," "); print $2}
Las secuencias de comandos que en esa carpeta que realmente se ejecutan en el nivel de ejecución 2 se nombran comenzando con S y seguidas de un número de prioridad. Ahora, básicamente, obtenemos todos los archivos que comienzan con S, y solo los enumeramos con solo el nombre de prioridad (todavía tenemos que descubrir cómo limpiar eso).
Como muru señaló correctamente en los comentarios, también hay
/etc/init/*.override
archivos que pueden ". .Modificar cómo se ejecutará un trabajo sin tener que modificar su archivo de configuración directamente" (página de inicio del manual )En el momento actual, dado que no tengo mucha experiencia con estos archivos, solo puedo sugerir que revise esos archivos .override usando el manual 'grep' '/etc/init/*.override' para enumerar los servicios que se indican que se inicien manualmente con
initctl
oservices
comandos.fuente
.override
archivos.Enumere todos los servicios y el estado de nivel de ejecución respectivo: estilo chkconfig:
Edición basada en texto interactivo de todos los listados:
Podría tener que instalarlo si no está allí:
fuente