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.