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

98

Мне нужно определить работающие в данный момент сервисы, но я не могу выяснить результаты работы 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 иметь какое-либо значение? Я попробовал это, и в моем случае это не имело никакого значения, но может ли это отличаться в других настройках?

Мухаммед Гелбана
источник

Ответы:

106

Вывод service --status-allсписков состояния сервисов контролируется System V.

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

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

Ссылка: man service

Шон
источник
2
Может представлять интерес: выходные данные для служб, помеченных -& +, перейдут на стандартный вывод, выходные данные для отмеченных служб ?перейдут на стандартный вывод.
dave1010
1
«Любой сервис, управляемый Upstart, также будет отображаться в списке, предоставленном сервисом --status-all, но будет помечен знаком?». Это не совсем верно. Просто попробовал обе команды на сервере. service --status-allдает мне 43 услуги. initctl listдает мне 93. Лишь немногие из этих 93 являются дубликатами.
Эндрю Энсли
На моей машине с Ubuntu «Upstart services» не отображается как «?» по сервису --status-all
hfrmobile
@hfrmobile, если только вы не используете 14.04 или не указали во время загрузки, что используете, Upstartто сейчас используете 'systemd'. Я тоже больше не вижу "?" в моей системе 16.04.
Шон
работает 16.10 ...
hfrmobile
30

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

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

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

 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

Условия:

  • если сценарий инициализации не поддерживает statusкоманду, состояние равно ?.
  • если состояние сценария инициализации (с statusаргументом) равно нулю, а вывод не пуст, состояние равно +.
  • в противном случае состояние -.
Мур
источник
1

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

Arronical
источник
0

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

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

user663581
источник
1
Ты уверен? некоторые сервисные статусы меняются динамически; может быть, вы просто видите изменения
Занна