Cara membaca hasil "service --status-all"


98

Saya perlu mengidentifikasi layanan yang sedang berjalan tetapi saya tidak dapat mengetahui hasil dari menjalankan service --status-all, maksud saya apa ? , - dan + rata-rata?

$ 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

Dan apakah menjalankan perintah ini dengan sudo akan membuat perbedaan? Saya mencobanya dan dalam kasus saya tidak ada bedanya, tetapi mungkin berbeda di pengaturan lain?

Jawaban:


106

Output dari service --status-alldaftar kondisi layanan yang dikendalikan oleh System V.

The +menunjukkan layanan ini berjalan, -menunjukkan layanan berhenti. Anda dapat melihat ini dengan menjalankan service SERVICENAME statusuntuk +dan -layanan.

Beberapa layanan dikelola oleh Upstart. Anda dapat memeriksa status semua Upstartlayanan dengan sudo initctl list. Setiap layanan yang dikelola oleh Upstartjuga akan ditampilkan dalam daftar yang disediakan oleh service --status-alltetapi akan ditandai dengan a ?.

Referensi: man service


2
Mungkin menarik: output untuk layanan yang ditandai -& +akan menuju stdout, output untuk layanan yang ditandai ?akan menuju stderr.
— dave1010

1
"Setiap layanan yang dikelola oleh Pemula juga akan ditampilkan dalam daftar yang disediakan oleh layanan --status-semua tetapi akan ditandai dengan?" Ini tidak sepenuhnya benar. Baru saja mencoba kedua perintah di server. service --status-allmemberi saya 43 layanan. initctl listmemberi saya 93. Hanya segelintir dari 93 yang merupakan duplikat.
— Andrew Ensley

Mesin Ubuntu saya tidak mencantumkan "Layanan pemula" sebagai "?" oleh layanan --status-all
— hfrmobile

@ hfrmobile kecuali Anda masih di 14,04 atau tentukan pada saat boot untuk menggunakan UpstartAnda menggunakan 'systemd' sekarang. Saya juga tidak lagi melihat "?" pada sistem 16.04 saya.
— Sean

menjalankan 16.10 ...
— hfrmobile

30

Itu tidak didokumentasikan di halaman manual, tetapi pandangan cepat pada sumber mengkonfirmasi dugaan pertama:

  • +: layanan sedang berjalan
  • -: layanan tidak berjalan
  • ?: status layanan tidak dapat ditentukan (karena alasan tertentu).

Kode aktual :

 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

Syaratnya adalah:

  • jika skrip init tidak mendukung statusperintah, maka statusnya adalah ?.
  • jika skrip init (dengan statusargumen) status keluar adalah nol dan output tidak kosong, keadaannya adalah +.
  • kalau tidak, negara -.

1

Saya percaya itu +berarti layanan aktif / berjalan, -berarti tidak aktif / berhenti, dan ?berarti bahwa perintah tidak dapat secara meyakinkan menentukan apakah itu aktif atau tidak, karena layanan tidak memiliki statusperintah dalam skrip layanan. The service --status-allperintah benar-benar berjalan service <service-name> statusuntuk setiap layanan yang tersedia.


0

Saya menemukan bahwa berjalan dengan / tanpa sudomembuat perbedaan.

Beberapa layanan di hanya /var/run/memiliki akses baca ke pengguna root. Layanan tersebut menunjukkan status [-]tanpa sudo, dan [+]dengan sudo.


1
Apakah kamu yakin beberapa status layanan berubah secara dinamis; mungkin Anda hanya melihat variasi
— Zanna
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.