Come leggere i risultati "service --status-all"


98

Devo identificare i servizi attualmente in esecuzione ma non riesco a capire i risultati della corsa service --status-all, intendo cosa significa ? , - e + significa?

$ 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

E l'esecuzione di questo comando con sudo potrebbe fare la differenza? L'ho provato e nel mio caso non ha fatto alcuna differenza, ma potrebbe differire in altre configurazioni?

Risposte:


106

L'output di service --status-allelenca lo stato dei servizi controllati da System V.

Il +indica che il servizio è in esecuzione, -indica un servizio arrestato. Puoi vederlo eseguendo service SERVICENAME statusun servizio +e -.

Alcuni servizi sono gestiti da Upstart. Puoi controllare lo stato di tutti i Upstartservizi con sudo initctl list. Qualsiasi servizio gestito da Upstartverrà visualizzato anche nell'elenco fornito da service --status-allma sarà contrassegnato da a ?.

Riferimento: man service


2
Potrebbe essere interessante: l'output per i servizi contrassegnati -e +andrà a stdout, l'output per i servizi contrassegnati ?andrà a stderr.
dave1010,

1
"Qualsiasi servizio gestito da Upstart verrà visualizzato anche nell'elenco fornito dal servizio --status-all ma sarà contrassegnato da un?." Questo non è strettamente vero. Ho appena provato entrambi i comandi su un server. service --status-allmi dà 43 servizi. initctl listmi dà 93. Solo una manciata di quei 93 sono duplicati.
Andrew Ensley,

La mia macchina Ubuntu non elenca "Servizi di avvio" come "?" per servizio --status-all
hfrmobile il

@hfrmobile a meno che tu non sia ancora su 14.04 o specifichi all'avvio per usare ora Upstartstai usando 'systemd'. Inoltre non vedo più "?" sul mio sistema 16.04.
Sean,

in esecuzione 16.10 ...
hfrmobile il

30

Non è documentato nella manpage, ma un rapido sguardo alla fonte conferma la prima ipotesi:

  • +: il servizio è in esecuzione
  • -: il servizio non è in esecuzione
  • ?: lo stato del servizio non può essere determinato (per qualche motivo).

Il codice attuale :

 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

Le condizioni sono:

  • se lo script init non supporta un statuscomando, lo stato è ?.
  • se lo script di init (con l' statusargomento) stato di uscita è zero e l' output non è vuoto, lo stato è +.
  • altrimenti lo stato è -.

1

Credo che ciò +significhi che il servizio è attivo / in esecuzione, -significa che è inattivo / interrotto e ?indica che il comando non può determinare in modo conclusivo se è attivo o meno, poiché il servizio non ha un statuscomando nello script di servizio. Il service --status-allcomando viene effettivamente eseguito service <service-name> statusper ogni servizio disponibile.


0

Trovo che correre con / senza sudofaccia la differenza.

Alcuni servizi /var/run/hanno accesso in lettura solo all'utente root. Tali servizi mostrano lo stato [-]senza sudoe [+]con sudo.


1
Sei sicuro? alcuni stati del servizio cambiano in modo dinamico; forse stai solo vedendo la variazione
Zanna
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.