Como ler os resultados "service --status-all"

98

Preciso identificar os serviços atualmente em execução, mas não consigo descobrir os resultados da execução service --status-all, quero dizer o que faz ? , - 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 rodar este comando com o sudo faria alguma diferença? Eu tentei e, no meu caso, não fez nenhuma diferença, mas pode ser diferente em outras configurações?

Muhammad Gelbana
fonte

Respostas:

106

A saída de service --status-alllista o estado dos serviços controlados por System V.

O +indica que o serviço está em execução, -indica um serviço parado. Você pode ver isso executando service SERVICENAME statusum serviço +e -.

Alguns serviços são gerenciados por Upstart. Você pode verificar o status de todos os Upstartserviços com sudo initctl list. Qualquer serviço gerenciado por Upstarttambém será exibido na lista fornecida por, service --status-allmas será marcado com a ?.

Referência: man service

Sean
fonte
2
Pode ser de interesse: a saída para serviços marcados -e +irá para stdout, a saída para serviços marcados ?irá para stderr.
precisa saber é o seguinte
1
"Qualquer serviço gerenciado pelo Upstart também será exibido na lista fornecida pelo serviço --status-all, mas será marcado com um?." Isto não é estritamente verdade. Apenas tentei os dois comandos em um servidor. service --status-allme dá 43 serviços. initctl listdá-me 93. Apenas um punhado desses 93 são duplicados.
Andrew Ensley
Minha máquina Ubuntu não lista "Serviços iniciados" como "?" pelo serviço --status-all
hfrmobile 6/12/16
@hfrmobile, a menos que você ainda esteja no 14.04 ou especifique no momento da inicialização o uso de Upstart'systemd' agora. Eu também não vejo mais "?" no meu sistema 16.04.
21416 Sean
executando 16.10 ...
hfrmobile 15/12
30

Não está documentado na página de manual, mas uma rápida olhada na fonte confirma o primeiro palpite:

  • +: o serviço está sendo executado
  • -: o serviço não está sendo executado
  • ?: o estado do serviço não pode ser determinado (por algum motivo).

O código real :

 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

As condições são:

  • se o script init não suportar um statuscomando, o estado será ?.
  • se o statusstatus de saída do script init (com o argumento) for zero e a saída não estiver vazia, o estado será +.
  • caso contrário, o estado é -.
muru
fonte
1

Acredito que +significa que o serviço está ativo / em execução, -significa que está inativo / parado e ?que o comando não pode determinar conclusivamente se está ativo ou não, pois o serviço não possui um statuscomando no script de serviço. O service --status-allcomando realmente é executado service <service-name> statuspara todos os serviços disponíveis.

Arronical
fonte
0

Acho que correr com / sem sudofaz a diferença.

Alguns serviços /var/run/têm acesso de leitura apenas ao usuário root. Esses serviços mostram status [-]sem sudoe [+]com sudo.

user663581
fonte
1
Você tem certeza? alguns status de serviço mudam dinamicamente; variação talvez você está apenas vendo
Zanna