Cách đọc dịch vụ của người dùng -


98

Tôi cần xác định các dịch vụ hiện đang chạy nhưng tôi không thể tìm ra kết quả của việc chạy service --status-all, ý tôi là gì ? , -+ có nghĩa là gì?

$ 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

Và việc chạy lệnh này với sudo có tạo ra sự khác biệt nào không? Tôi đã thử nó và trong trường hợp của tôi, nó không tạo ra sự khác biệt nào, nhưng nó có thể khác trong các thiết lập khác không?

Câu trả lời:


106

Đầu ra của service --status-alldanh sách các trạng thái của dịch vụ được kiểm soát bởi System V.

Dấu +hiệu cho biết dịch vụ đang chạy, -biểu thị dịch vụ đã dừng. Bạn có thể thấy điều này bằng cách chạy service SERVICENAME statuscho một +-dịch vụ.

Một số dịch vụ được quản lý bởi Upstart. Bạn có thể kiểm tra trạng thái của tất cả các Upstartdịch vụ với sudo initctl list. Bất kỳ dịch vụ nào được quản lý Upstartcũng sẽ hiển thị trong danh sách được cung cấp bởi service --status-allnhưng sẽ được đánh dấu bằng a ?.

Tài liệu tham khảo: man service


2
Có thể được quan tâm: đầu ra cho các dịch vụ được đánh dấu -& +sẽ đi đến thiết bị xuất chuẩn, đầu ra cho các dịch vụ được đánh dấu ?sẽ đi đến thiết bị lỗi chuẩn.
dave1010

1
"Bất kỳ dịch vụ nào được quản lý bởi Upstart cũng sẽ hiển thị trong danh sách được cung cấp bởi dịch vụ --status-all nhưng sẽ được đánh dấu bằng một?" Điều này là không đúng sự thật. Chỉ cần thử cả hai lệnh trên một máy chủ. service --status-allcung cấp cho tôi 43 dịch vụ. initctl listcho tôi 93. Chỉ một số ít trong số 93 là trùng lặp.
Andrew Oblley

Máy Ubuntu của tôi không liệt kê "Dịch vụ khởi động" là "?" bởi dịch vụ --status-all
hfrmobile 6/12/2016

@hfrmobile trừ khi bạn vẫn còn trên 14.04 hoặc chỉ định lúc khởi động để sử dụng, Upstartbạn đang sử dụng 'systemd' ngay bây giờ. Tôi cũng không còn thấy "?" trên hệ thống 16.04 của tôi.
Sean

chạy 16.10 ...
hfrmobile

30

Nó không được ghi lại trong trang, nhưng một cái nhìn nhanh về nguồn xác nhận phỏng đoán đầu tiên:

  • +: dịch vụ đang chạy
  • -: dịch vụ không chạy
  • ?: trạng thái dịch vụ không thể được xác định (vì một số lý do).

Mã thực tế :

 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

Các điều kiện là:

  • nếu tập lệnh init không hỗ trợ statuslệnh, trạng thái là ?.
  • nếu statustrạng thái thoát init script (với đối số) bằng 0 đầu ra không trống, trạng thái là +.
  • nếu không thì nhà nước là -.

1

Tôi tin rằng điều đó +có nghĩa là dịch vụ đang hoạt động / đang chạy, -có nghĩa là nó không hoạt động / đã dừng và ?có nghĩa là lệnh không thể kết luận chắc chắn liệu nó có hoạt động hay không, vì dịch vụ không có statuslệnh trong tập lệnh dịch vụ. Các service --status-alllệnh thực sự chạy service <service-name> statuscho mỗi dịch vụ có sẵn.


0

Tôi thấy rằng chạy với / không có sudosự khác biệt.

Một số dịch vụ /var/run/chỉ có quyền truy cập đọc cho người dùng root. Những dịch vụ hiển thị trạng thái [-]mà không có sudo, và [+]với sudo.


1
Bạn có chắc không? một số trạng thái dịch vụ thay đổi linh hoạt; có lẽ bạn chỉ đang nhìn thấy sự thay đổi
Zanna
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.