Cómo leer los resultados de "servicio - estado-todos"

98

Necesito identificar los servicios que se ejecutan actualmente, pero no puedo entender los resultados de la ejecución service --status-all, quiero decir, ¿qué hace ? , - y + mean?

$ service --status-all
 [ + ]  acpid
 [ + ]  anacron
 [ + ]  apparmor
 [ ? ]  apport
 [ ? ]  atieventsd
 [ + ]  avahi-daemon
 [ ? ]  binfmt-support
 [ + ]  bluetooth
 [ - ]  brltty
 [ + ]  console-font
 [ + ]  console-setup
 [ + ]  cron
 [ + ]  cups
 [ + ]  cups-browsed
 [ - ]  dbus
 [ ? ]  dns-clean
 [ + ]  friendly-recovery
 [ - ]  grub-common
 [ ? ]  irqbalance
 [ - ]  kerneloops
 [ ? ]  killprocs
 [ + ]  kmod
 [ ? ]  lightdm
 [ - ]  lm-sensors
 [ ? ]  mysql
 [ ? ]  networking
 [ ? ]  ondemand
 [ ? ]  pppd-dns
 [ - ]  procps
 [ - ]  pulseaudio
 [ ? ]  rc.local
 [ + ]  resolvconf
 [ + ]  rfkill-restore
 [ + ]  rfkill-store
 [ - ]  rsync
 [ + ]  rsyslog
 [ + ]  saned
 [ ? ]  sendsigs
 [ + ]  setvtrgb
 [ ? ]  speech-dispatcher
 [ - ]  sudo
 [ + ]  timidity
 [ + ]  udev
 [ ? ]  umountfs
 [ ? ]  umountnfs.sh
 [ ? ]  umountroot
 [ - ]  unattended-upgrades
 [ - ]  urandom
 [ + ]  virtualbox
 [ - ]  x11-common

¿Y ejecutar este comando con sudo haría alguna diferencia? Lo probé y en mi caso no hizo ninguna diferencia, pero ¿puede diferir en otras configuraciones?

Muhammad Gelbana
fuente

Respuestas:

106

La salida de service --status-allenumera el estado de los servicios controlados por System V.

El +indica que el servicio se está ejecutando, -indica un servicio detenido. Esto se puede ver mediante la ejecución service SERVICENAME statusde una +y de -servicio.

Algunos servicios son administrados por Upstart. Puede verificar el estado de todos los Upstartservicios con sudo initctl list. Cualquier servicio administrado por Upstarttambién se mostrará en la lista proporcionada por service --status-allpero estará marcado con un ?.

Referencia: man service

Sean
fuente
2
Puede ser de interés: la salida para los servicios marcados -y se +enviará a stdout, la salida para los servicios marcados ?irá a stderr.
dave1010
1
"Cualquier servicio administrado por Upstart también aparecerá en la lista provista por el servicio --status-all pero estará marcado con un?". Esto no es estrictamente cierto. Acabo de probar ambos comandos en un servidor. service --status-allme da 43 servicios. initctl listme da 93. Solo un puñado de esos 93 son duplicados.
Andrew Ensley
Mi máquina Ubuntu no incluye "Servicios de inicio" como "?" por servicio --status-all
hfrmobile
@hfrmobile, a menos que todavía esté en 14.04 o especifique en el momento del arranque para usar Upstart, está usando 'systemd' ahora. También ya no veo "?" en mi sistema 16.04.
Sean
corriendo 16.10 ...
hfrmobile
30

No está documentado en la página de manual, pero un vistazo rápido a la fuente confirma la primera suposición:

  • +: el servicio se está ejecutando
  • -: el servicio no se está ejecutando
  • ?: el estado del servicio no se puede determinar (por alguna razón).

El código actual :

 if ! is_ignored_file "${SERVICE}" \
 && [ -x "${SERVICEDIR}/${SERVICE}" ]; then
         if ! grep -qs "\(^\|\W\)status)" "$SERVICE"; then
           #printf " %s %-60s %s\n" "[?]" "$SERVICE:" "unknown" 1>&2
           echo " [ ? ]  $SERVICE" 1>&2
           continue
         else
           out=$(env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE" status 2>&1)
           if [ "$?" = "0" -a -n "$out" ]; then
             #printf " %s %-60s %s\n" "[+]" "$SERVICE:" "running"
             echo " [ + ]  $SERVICE"
             continue
           else
             #printf " %s %-60s %s\n" "[-]" "$SERVICE:" "NOT running"
             echo " [ - ]  $SERVICE"
             continue
           fi
         fi
   #env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE" status
 fi

Las condiciones son:

  • Si el script de inicio no admite un statuscomando, el estado es ?.
  • si el statusestado de salida del script de inicio (con el argumento) es cero y la salida no está vacía, el estado sí lo es +.
  • de lo contrario el estado es -.
muru
fuente
1

Creo que eso +significa que el servicio está activo / en ejecución, -significa que está inactivo / detenido y ?que el comando no puede determinar de manera concluyente si está activo o no, ya que el servicio no tiene un statuscomando en el script de servicio. El service --status-allcomando realmente se ejecuta service <service-name> statuspara cada servicio disponible.

Arronico
fuente
0

Me parece que correr con / sin sudohace la diferencia.

Algunos servicios /var/run/tienen acceso de lectura solo para el usuario root. Esos servicios muestran estado [-]sin sudoy [+]con sudo.

usuario663581
fuente
1
¿Estás seguro? algunos estados de servicio cambian dinámicamente; tal vez solo estás viendo variación
Zanna