Мне нужно определить работающие в данный момент службы, но я не могу выяснить результаты выполнения 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
.
+
указывает на то, что сервис работает, -
указывает на то, что сервис остановлен. Это видно по статусу СЕРВИСЕНАМА СЕРВИСЕНА
для +
и -
.
Некоторые службы управляются с помощью Ускоренный пуск
. Проверить статус всех служб Upstart
можно с помощью sudo initctl list
. Любая служба, управляемая Upstart
, также отобразится в списке, предоставляемом службой --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 <имя-службы> status
для каждой доступной службы.
Я считаю, что работа с / без sudo
имеет значение.
Некоторые службы в / var / run /
имеют доступ на чтение только для пользователя root. Эти службы показывают статус [-]
без sudo
и [+]
с sudo
.