Liệt kê tất cả các dịch vụ bắt đầu khi khởi động


15

Tôi đang tìm cách để có được danh sách tất cả các dịch vụ (/etc/init.d hoặc upstart hoặc systemd), được cho là bắt đầu (hoặc đã bắt đầu lúc) khởi động.

Làm thế nào để bạn có được một danh sách tất cả các dịch vụ bắt đầu? - Tôi biết câu hỏi đó, và nó gợi ý sử dụng service --status-all.

Nhưng điều đó không cho tôi thấy, dịch vụ nào được CUNG CẤP ĐỂ CHẠY . Nó gọi tất cả các tập lệnh init với statusđối số "". Đây là danh sách tất cả các dịch vụ có thể đang chạy.

Nhưng tôi muốn biết, nếu một dịch vụ, đã được khởi động lúc boot vẫn đang chạy.

Thí dụ…

Tôi đã cài đặt webfs. Nhưng tôi không muốn nó chạy khi khởi động. Vì vậy, tôi đã vô hiệu hóa nó : sudo update-rc.d webfs disable. Và tôi cũng đã cài đặt samba và nó sẽ chạy khi khởi động. Nhưng nó đã dừng lại (vì bất cứ lý do gì). sudo service --status-allkhông giúp tôi ở đây:

$ sudo service --status-all 2>/dev/null | grep -E 'samba$|webfs'
 [ - ]  samba
 [ - ]  webfs

Cả hai đều tắt nhưng tôi không có manh mối, rằng một (samba) được cho là sẽ được bật.

Vì thế…

Làm thế nào tôi có thể nhận được một danh sách tất cả các dịch vụ bắt đầu khi khởi động? Và, như một phần mở rộng, có một cách dễ dàng để có được "trạng thái" của các dịch vụ này (nếu không, tôi chỉ đơn giản lặp lại danh sách này và chạy "dịch vụ $ status status", hoặc đại loại như thế này).

Cảm ơn, Alexander

Chỉnh sửa 2015-05-04: Tôi đang dùng Ubuntu 14.04.

Trọng tâm chính của câu hỏi này là:

Nhưng tôi muốn biết, nếu một dịch vụ, đã được khởi động lúc boot vẫn đang chạy.

Bởi vì điều này, initctl listkhông giúp được gì nhiều. Nó không thực sự xem xét các dịch vụ được bắt đầu bởi /etc/init.dcác tập lệnh (so với các tập lệnh mới bắt đầu /etc/init).

Ngoài ra một danh sách /etc/rc?.d/S*không giúp đỡ. Nó sẽ tạo ra một danh sách các dịch vụ, có thể đã được bắt đầu trong một runlevel nhất định. Nó không cho tôi thấy, nếu một dịch vụ, đã được bắt đầu, vẫn đang chạy.

Về cơ bản, tôi đang tìm kiếm một cái gì đó giống như svcs -xtừ Solaris cho Ubuntu. Với svcs -x, tôi sẽ có đầu ra nếu một dịch vụ, được bắt đầu, không chạy nữa. Điều này, tôi cũng cần cho Ubuntu.

Lý do: Tôi muốn có một kiểm tra chung (ít nhiều ...) cho hệ thống giám sát Icinga / Nagios của chúng tôi, điều này sẽ cảnh báo tôi, nếu một dịch vụ không chạy nữa thì nên chạy. Vì chúng tôi có nhiều máy chủ khác nhau cho nhiều khách hàng khác nhau, nên thực sự không có quy mô để xác định danh sách các dịch vụ "quan trọng".


Phiên bản Ubuntu nào?
AB


@Parto Câu trả lời được chấp nhận trong câu hỏi initctl listđó là liệt kê các quy trình được bắt đầu / chạy, nhưng danh sách đó cũng sẽ bao gồm các quy trình được bắt đầu thủ công
Sergiy Kolodyazhnyy

@AB Tôi đang dùng Ubuntu 14.04.
Alexander Skwar 04/05/2015

@Parto Askubfox.com/questions/218/ không hoàn toàn cung cấp câu trả lời. Như @Serg đã viết, câu trả lời là có sử dụng initctl list. Nhưng điều đó không thực sự trả lời nó, vì nó cũng sẽ hiển thị các dịch vụ bắt đầu bằng tay. Và nó không hiển thị các dịch vụ không chạy.
Alexander Skwar 04/05/2015

Câu trả lời:


19

Tất cả các dịch vụ bắt đầu khi khởi động:

initctl list

Danh sách tất cả các dịch vụ tồn tại trong hệ thống:

service --status-all

Sai lầm. Không cung cấp danh sách các dịch vụ được kích hoạt (bắt đầu khi khởi động). Chúng hiển thị tất cả các dịch vụ đã biết (một số dịch vụ có thể bị vô hiệu hóa) và liệu chúng có đang chạy hay không (điều đó không nhất thiết có nghĩa là chúng được khởi động tự động).
Rebier Post

2

Đây là oneliner của tôi grep -i 'runlevel' /etc/init/* | awk '!/#/ && /start on/ && /2/ {gsub("/"," "); print $0 }' | cut -d ' ' -f4-

Một đầu ra sạch hơn một chút có thể đạt được với grep -i 'runlevel' /etc/init/* | awk '/start on/ && /2/ {gsub("/"," "); gsub(":", " ");gsub(".conf"," "); print $3 }'

Bây giờ hãy đi vào chi tiết. Công việc mới bắt đầu được lưu trữ trong /etc/init/, phải không? Các công việc ở đó đều có một dòng ghi rõ runlevel họ bắt đầu. Runlevel 2 là một bootlevel bình thường, mặc định runlevel. Vì vậy, nếu chúng ta grep tất cả các dòng nói runlevelvà làm sạch đầu ra của grep với awk để chỉ khớp với các dòng với start onvà runlevel # 2, chúng ta sẽ nhận được danh sách các công việc mới bắt đầu. Phần còn lại chỉ để hình thành nhu cầu, thay thế / trong tên tệp vào không gian và cắt đường dẫn đến các tệp đó, để lại tên tệp.

Một !/#/phần là để giải quyết các chỉ thị bắt đầu có thể nhận xét, mà tôi đã tự mình thêm vào.

Trong số những thứ khác, có /etc/rc2.dnơi (nếu tôi hiểu chính xác) bạn có các tập lệnh ưu tiên ít hơn.

Một lớp lót thô cho đó là: ls /etc/rc2.d/* | grep S | awk '{sub("S"," "); print $2}

Các tập lệnh trong thư mục đó thực sự chạy trên runlevel 2 được đặt tên bắt đầu bằng S và theo sau là số ưu tiên. Bây giờ, về cơ bản, chúng tôi nhận được tất cả các tệp bắt đầu bằng S và chỉ liệt kê chúng với tên ưu tiên (vẫn phải tìm cách xóa sạch tệp đó).

Như muru đã chỉ ra một cách chính xác trong các bình luận, cũng có /etc/init/*.overridecác tệp, có thể ".. Thay đổi cách thức một công việc sẽ chạy mà không phải sửa đổi trực tiếp tệp cấu hình của nó" ( init manpage )

Hiện tại, vì tôi chưa có nhiều kinh nghiệm với các tệp này, tôi chỉ có thể đề xuất xem qua các tệp .override đó bằng cách sử dụng 'grep' hướng dẫn '/etc/init/*.override' để liệt kê các dịch vụ được cho biết sẽ bắt đầu thủ công với initctlhoặc serviceslệnh.


Lưu ý rằng do phụ thuộc vào sự kiện, không thể dễ dàng xác định nếu một dịch vụ cụ thể sẽ dẫn đến các dịch vụ khác được bắt đầu. Cũng có vấn đề nhỏ của .overridecác tập tin.
muru

@Serg cảm ơn. Nhưng điều đó chỉ liên quan đến những thứ mới nổi. Ngoài ra "ls /etc/rc2.d/* ..." không giúp được gì nhiều. Nó sẽ hiển thị, những dịch vụ có thể đã được bắt đầu. Nhưng nó không hiển thị, dịch vụ nào vẫn đang chạy. Tôi đoán, điểm chính của bài viết của tôi không rõ ràng. Tôi đang tìm kiếm: Nhưng tôi muốn biết, nếu một dịch vụ, đã được khởi động khi khởi động vẫn đang chạy. Không biết nếu bạn biết Solaris. Ở đó, tôi chỉ đơn giản là làm "svcs -x", và nếu nó trả về một cái gì đó, tôi biết rằng cái gì đó không chạy. Tôi sẽ cần một cái gì đó như thế này cho Ubuntu.
Alexander Skwar 04/05/2015

Vâng, người ta có thể viết một tập lệnh hoặc hàm bashrc để so sánh các kết quả đầu ra của một lớp lót của tôi ở đó và của danh sách initctl. Muốn tôi đăng bài đó không?
Sergiy Kolodyazhnyy

@ Hoàn thành tốt - nếu bạn đang cung cấp;)
Alexander Skwar

2

Liệt kê tất cả các dịch vụ và trạng thái runlevel tương ứng - kiểu chkconfig:

# sysv-rc-conf --list

acpid        2:on       3:on    4:on    5:on
apache-htcac 0:off      1:off   2:off   3:off   4:off   5:off   6:off
apache2      0:off      1:off   2:on    3:on    4:on    5:on    6:off

Chỉnh sửa dựa trên văn bản tương tác của tất cả các danh sách:

# sysv-rc-conf

l SysV Runlevel Config   -: stop service  =/+: start service  h: help  q: quit qk
x 
x service      1       2       3       4       5       0       6       S 
x ----------------------------------------------------------------------------
x acpid       [ ]     [X]     [X]     [X]     [X]     [ ]     [ ]     [ ]
x apache-ht$  [ ]     [ ]     [ ]     [ ]     [ ]     [ ]     [ ]     [ ]
x apache2     [ ]     [X]     [X]     [X]     [X]     [ ]     [ ]     [ ]
x
x Use the arrow keys or mouse to move around.      ^n: next pg     ^p: prev pg
x                        space: toggle service on / off

Có thể phải cài đặt nó nếu không có:

apt install sysv-rc-conf
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.