Trong Ubuntu, có lệnh nào hiển thị danh sách TẤT CẢ các dịch vụ tự khởi động không?


22

Trong Ubuntu,

  1. Có một lệnh để hiển thị một danh sách của tất cả các dịch vụ tự khởi động?
  2. Có một lệnh để kiểm tra nếu một dịch vụ được tự động khởi động khi khởi động hay không?

Tôi đã làm Google và IRC. Tôi không thể tìm thấy câu trả lời. Có lẽ không có lệnh nào như vậy tồn tại trong Ubuntu. Ban đầu, tôi nghĩ tất cả các dịch vụ tự khởi động sẽ hoạt động /etc/rc2.d/, nhưng tôi đã sai về điều đó. Một số được cấu hình chỉ dưới /etc/init/*.conf. Sau đó, tôi đã thử chkconfigcông cụ (cài đặt thủ công), nó không hoạt động mọi lúc. Chẳng hạn, nó đưa ra kết quả sai cho việc mongodbtự khởi động từ đó /etc/init/mongodb.conf.

service --status-allinitctl listchỉ có thể cho biết trạng thái hiện tại của dịch vụ thay vì trạng thái tự khởi động. update-rc.dlà một lệnh để thay đổi trạng thái tự khởi động thay vì hiển thị trạng thái.

Nếu không có câu trả lời cho câu hỏi của tôi, tôi chỉ tự hỏi tại sao thật khó để kiểm tra các dịch vụ tự khởi động trong Ubuntu.


Tôi nghĩ chkconfig --listsẽ làm việc phải không? oncó nghĩa là dịch vụ đang chạy trên runlevel đó và dịch vụ đó sẽ tự động khởi động khi hệ thống khởi động.
tối đa

1
Như những gì tôi đã đăng trong câu hỏi của mình, chkconfig không phải lúc nào cũng hoạt động. ví dụ, nó sẽ cho kết quả sai cho mongodb. Tôi nghĩ rằng nó có thể bởi vì mongodb sử dụng /etc/init/mongodb.conf để thực hiện tự động khởi động.
SSS

Thế còn ls /etc/rc?.d?
toxaq

Câu trả lời:


11

Ubuntu sử dụng Upstartthay vì inithệ thống truyền thống. Upstart mạnh hơn init, nhưng nó phức tạp hơn một chút so với init.

Ngược lại, ngược lại, là dựa trên sự kiện. Một "sự kiện" có thể là một cái gì đó như "khởi động" ... hoặc nó có thể cụ thể hơn rất nhiều, như "mạng đã sẵn sàng để sử dụng ngay bây giờ". Bạn có thể chỉ định tập lệnh nào phụ thuộc vào sự kiện nào. Bất cứ điều gì không chờ đợi một sự kiện đều có thể chạy bất cứ khi nào có sẵn CPU.

Hệ thống dựa trên sự kiện này có một lợi thế khác: về mặt lý thuyết bạn có thể sử dụng nó ngay cả khi hệ thống đã hoạt động. Upstart cuối cùng được dự kiến ​​sẽ đảm nhận các nhiệm vụ như hoặc cắm vào các thiết bị bên ngoài như ổ ngón tay cái (hiện đang được xử lý bởi udev và hal) hoặc chạy các chương trình tại thời điểm cụ thể (hiện đang được xử lý bởi cron).

Như bạn đã biết bây giờ, một daemon đã chết (không chạy khi khởi động) có thể còn sống và bắt đầu vì một sự kiện.

Ubuntu có cả / etc / init, cho Upstart và /etc/init.d, cho các tệp SysV cũ. Một số tệp trong đó là các tập lệnh SysV init thông thường chưa được di chuyển. Nhưng một số dịch vụ đã di chuyển duy trì một liên kết từ /etc/init.d đến / lib / init / upstart-job. Nếu bạn chạy một trong số đó, nó sẽ hoạt động, nhưng nó sẽ in cảnh báo trước:

Thay vì gọi các tập lệnh init thông qua /etc/init.d, hãy sử dụng tiện ích dịch vụ (8), vd service mysql restart

Vì tập lệnh mà bạn đang cố gắng gọi đã được chuyển đổi thành công việc Upstart, bạn cũng có thể sử dụng tiện ích khởi động lại (8), ví dụ: khởi động lại mysql.

Trên máy Upstart, init xuất phát từ upstart. Thay vì chạy một tập lệnh RC chính gọi các tập lệnh cho một runlevel cụ thể, init của Upstart nhận công việc từ thư mục công việc của nó.

Bây giờ chúng tôi biết không có cách đơn giản nào để liệt kê các trình tự khởi động, bạn nên liệt kê tất cả các trình tiện ích và kiểm tra từng cái một. Trình nền có thể được bắt đầu initbằng upstarthoặc thậm chí bởi một sự kiện sau đó. Cách đơn giản nhất để có được danh sách này là chạy lệnh này trong trình bao:

initctl show-config

Đầu ra trông như thế này:

...
hostname
  start on startup
udevtrigger
  start on ((startup and started udev) and not-container)
tty2
  start on (runlevel [23] and ((not-container or container CONTAINER=lxc) or container CONTAINER=lxc-libvirt))
...

Một số mục như cái đầu tiên rất đơn giản, hostnamebắt đầu khởi động. Nhưng các mặt hàng khác có thể trông phức tạp hơn. (Nhưng may mắn thay, con người có thể đọc được :-))


Tôi biết hầu hết những gì bạn đăng. Mặc dù có những điều mới mà tôi không biết, nhưng chúng vẫn không thể giải quyết vấn đề của tôi. Tôi chỉ muốn biết nếu có một lệnh có thể thực hiện công việc một cách dễ dàng (cho cả dịch vụ khởi động và dịch vụ init). Có vẻ như Ubuntu không có. Thật đáng tiếc! nhân tiện, "initctl" chỉ có thể xử lý các dịch vụ mới nhất, thay vì hệ thống init truyền thống. Nếu không có cách nào dễ dàng, thì tôi phải sử dụng cách khó khăn ... cảm ơn.
SSS

Tôi xin lưu ý, trong khi các phiên bản hiện đại không chính xác của Ubuntu đã chuyển sang systemd. Thật thú vị là một đoạn hay của câu trả lời này vẫn còn hiệu lực
Journeyman Geek

Các phiên bản mới của Ubuntu không sử dụng mới bắt đầu nhưng systemd unix.stackexchange.com/a/287282/147671
João Pimentel Ferreira

5

Trên thực tế, tất cả các dịch vụ chỉ hiện diện dưới /etc/init.d:

rc0.d contains the services which runs in runlevel 0
rc1.d contains the services which runs in runlevel 1
rc2.d contains the services which runs in runlevel 2
rc3.d contains the services which runs in runlevel 3
rc4.d contains the services which runs in runlevel 4
rc5.d contains the services which runs in runlevel 5
rc6.d contains the services which runs in runlevel 6

Một điều nữa, tất cả các dịch vụ cũng có mặt rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d rc6.d, nhưng đó chỉ là một liên kết tượng trưng /etc/init.d.

Xem ở đây đây là nội dung của rc1.dthư mục:

lrwxrwxrwx 1 root root  20 Aug 17 14:54 K15pulseaudio -> ../init.d/pulseaudio
lrwxrwxrwx 1 root root  22 Nov 28 18:47 K20acpi-support -> ../init.d/acpi-support
lrwxrwxrwx 1 root root  20 Aug 17 14:54 K20kerneloops -> ../init.d/kerneloops
lrwxrwxrwx 1 root root  23 Nov  7 15:24 K20openbsd-inetd -> ../init.d/openbsd-inetd
lrwxrwxrwx 1 root root  15 Aug 17 14:54 K20saned -> ../init.d/saned
lrwxrwxrwx 1 root root  27 Aug 17 14:54 K20speech-dispatcher -> ../init.d/speech-dispatcher
-rw-r--r-- 1 root root 369 Apr 14  2012 README
lrwxrwxrwx 1 root root  19 Aug 17 14:54 S30killprocs -> ../init.d/killprocs
lrwxrwxrwx 1 root root  19 Aug 17 14:54 S70dns-clean -> ../init.d/dns-clean

Tại đây bạn có thể quan sát liên kết tượng trưng đến init.d (K15pulseaudio -> ../init.d/pulseaudio).

Nhưng ở đây mọi dịch vụ đều được liên kết với init.d, phải không? Nhưng mọi dịch vụ sẽ không bắt đầu; Lý do là hai kịch bản.

Tập đầu tiên là tập lệnh S (S30killprocs) ---> bắt đầu

Cái thứ hai là một tập lệnh k (K15pulseaudio) ---> kill

Tất cả các dịch vụ tập lệnh K giết các dịch vụ và tất cả các dịch vụ tập lệnh S bắt đầu các dịch vụ cho runlevel đó.

Tóm lại

S70dns-clean -> ../init.d/dns-cleanbắt đầu dns-cleandịch vụ trong runlevel 1.

K15pulseaudio -> ../init.d/pulseaudiogiết chết pulseaudiodịch vụ trong runlevel 1.


Không đúng với các dịch vụ mới nhất, có thể không xuất hiện ở đây.
tự đại diện

2

Bạn có thể cài đặt sysv-rc-conf là một chương trình ncurses để cấu hình / hiển thị các mức độ đồ họa.


0

Có một lệnh để hiển thị một danh sách của tất cả các dịch vụ tự khởi động?

Nhìn vào đây: update-rc-d-cheat-sheet

Có một lệnh để kiểm tra nếu một dịch vụ được tự động khởi động khi khởi động hay không?

Không, tôi không biết (điều đó không có nghĩa gì cả;), nhưng bạn có thể bắt đầu đọc tại đây: diễn đàn Askubfox - phụ thuộc dịch vụ

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.