「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
興味深いかもしれません:-+とマーク?されたサービスの出力はstdoutに行き、マークされたサービスの出力はstderrに行きます。
-dave1010

1
「Upstartによって管理されるサービスは、service --status-allによって提供されるリストにも表示されますが、?でマークされます。」これは厳密には正しくありません。サーバーで両方のコマンドを試しました。service --status-all43のサービスを提供します。initctl list93が得られます。これらの93のうち少数が複製です。
アンドリューエンスリー

Ubuntuマシンに「Upstart services」が「?」と表示されない サービス--status-すべて
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

条件は次のとおりです。

  • initスクリプトがstatusコマンドをサポートしていない場合、状態は?です。
  • initスクリプト(status引数付き)の終了ステータスがゼロで出力が空でない場合、状態は+です。
  • それ以外の場合、状態は-です。

1

これ+は、サービスがアクティブ/実行中であり、-非アクティブ/停止であり?、サービスがstatusサービススクリプトにコマンドを持たないため、コマンドがアクティブかどうかを最終的に判断できないことを意味すると考えています。service --status-allこのコマンドは、実際に実行しservice <service-name> status、すべての利用可能なサービスのために。


0

あり/なしで実行sudoすると違いが生じることがわかりました。

の一部のサービスに/var/run/は、rootユーザーのみに読み取りアクセス権があります。これらのサービスは、[-]なしでsudo、および[+]でステータスを示しますsudo


1
本気ですか?一部のサービスステータスは動的に変化します。たぶん、あなたはただ変化を見ている
-Zanna
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.