Как прочитать результаты "сервис -статус-все"

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

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

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

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

Ссылка: man service

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

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

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

 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 аргумент) статус выхода равен нулю и вывод не является пустым, состояние равно +.
  • в противном случае государство является -.

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

Я нахожу, что бег с / без sudo имеет значение.

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