如何读取“service --status-all”结果

Muh*_*ana 112 services

我需要识别当前正在运行的服务,但我无法弄清楚运行的结果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
Run Code Online (Sandbox Code Playgroud)

用 sudo 运行这个命令会有什么不同吗?我试过了,在我的情况下它没有任何区别,但在其他设置中可能会有所不同吗?

Sea*_*ean 120

的输出service --status-all列出了由 控制的服务的状态System V

+指示服务正在运行,-表明已停止的服务。您可以通过运行service SERVICENAME statusa+-服务来看到这一点。

某些服务由Upstart. 您可以使用 来检查所有Upstart服务的状态sudo initctl list。由 管理的任何服务Upstart也将显示在由 提供的列表中,service --status-all但会标有?.

参考: man service

  • 可能感兴趣:标记为 `-` 和 `+` 的服务的输出将进入 stdout,标记为 `?` 的服务的输出将进入 stderr。 (2认同)
  • 我的 Ubuntu 机器没有将“Upstart 服务”列为“?” 通过 **service --status-all** (2认同)

mur*_*uru 31

手册页中没有记录,但快速查看源代码证实了第一个猜测:

  • +: 服务正在运行
  • -: 服务没有运行
  • ?:无法确定服务状态(出于某种原因)。

实际代码

 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
Run Code Online (Sandbox Code Playgroud)

条件是:

  • 如果 init 脚本不支持status命令,则状态为?.
  • 如果 init 脚本(带有status参数)退出状态为零输出不为空,则状态为+.
  • 否则状态为-