问题描述
我需要确定当前正在运行的服务,但我无法弄清楚运行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
管理。您可以使用sudo initctl list
检查所有Upstart
服务的状态。由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
条件是:
-
如果init脚本不支持
status
命令,则状态为?
。 -
如果init脚本(带有
status
参数)退出状态为零且输出不为空,则状态为+
。 -
否则州是
-
。