Как читать результаты «service -status-all»

67

Мне нужно определить текущие службы, но я не могу понять результаты работы service --status-all , я имею в виду, что означает ? , - и + означает?

$ 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

И будет ли эта команда работать с sudo в любом случае? Я попробовал это, и в моем случае это не имело никакого значения, но может ли он отличаться в других настройках?

    
задан Muhammad Gelbana 17.01.2014 в 22:52
источник

4 ответа

71

Результат service --status-all перечисляет состояние служб, контролируемых System V .

+ указывает, что служба запущена, - указывает на остановленную услугу. Вы можете увидеть это, выполнив service SERVICENAME status для службы + и - .

Некоторые службы управляются Upstart . Вы можете проверить статус всех Upstart сервисов с sudo initctl list . Любая служба, управляемая Upstart , также будет отображаться в списке, представленном service --status-all , но будет отмечена ? .

Ссылка: man service

    
ответ дан Sean 17.02.2014 в 17:37
источник
20

Это не задокументировано в manpage, но быстрый взгляд на источник подтверждает первое предположение:

  • + : служба работает
  • - : служба не запущена
  • ? : состояние службы не может быть определено (по какой-либо причине).

Фактический код :

 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

Условия:

  • Если скрипт init не поддерживает команду status , то состояние ? .
  • Если сценарий init (с аргументом status ) имеет статус выхода 0 и , то вывод не пуст, состояние + .
  • В противном случае состояние - .
ответ дан muru 09.07.2015 в 18:00
1

Я считаю, что + означает, что служба активна / работает, - означает, что она неактивна / остановлена, а ? означает, что команда не может окончательно определить, активна она или нет, поскольку служба не есть команда status в скрипте службы. Команда service --status-all фактически запускает service <service-name> status для каждой доступной службы.

    
ответ дан Arronical 09.07.2015 в 17:53
0

Я считаю, что работа с / без sudo имеет значение.

Некоторые службы в /var/run/ имеют доступ только для пользователей root. Эти службы показывают статус [-] без sudo и [+] с sudo .

    
ответ дан user663581 10.03.2017 в 00:20