Vô hiệu hóa một dịch vụ từ bắt đầu tại tất cả các runlevels?


61

Tôi có một dịch vụ foohiện đang bắt đầu tại runlevel 3 trở lên. Làm thế nào tôi có thể ngăn chặn nó làm như vậy, mà không sử dụng update-rc.d foo stop 3 ., mà (nếu tôi hiểu chính xác) sẽ tắt dịch vụ tại mỗi thay đổi runlevel.

(ví dụ: nếu tôi ở runlevel 1 và được bật foo, thì khi tôi đổi thành runlevel 3, nó sẽ bị vô hiệu hóa, phải không?)

Chạy Debian GNU / Linux Lenny.

Câu trả lời:


57

Thuật ngữ "dừng" không ngăn trình nền bắt đầu mà thay vào đó tắt nó trong khi nhập runlevel được chỉ định.

Nếu bạn chỉ muốn xóa một dịch vụ / daemon khỏi một runlevel duy nhất, update-rc.dnhư đã chỉ ra bei freiheit hoặc chỉ cần xóa symlink từ đó /etc/rcX.d/, trong đó X là runlevel của bạn. Nếu bạn không muốn dịch vụ bắt đầu tự động, update-rc.d -f foo removesẽ thực hiện thủ thuật.


2
Bạn có ý tưởng nào để làm điều đó trên Debian 8 không? sudo update-rc.d -f sunrpc removekhông hoạt động; nó vẫn hiện diện sau khi khởi động lại.

Debian 9 Điều này không hiệu quả với tôi, và rồi tôi nhận ra, oh derp, cần sudo. update-rc.d không đưa ra phản hồi nếu bạn quên sudo. Tôi xác nhận các liên kết đã biến mấtls /etc/rc*.d
Jason Dunkelberger

Lệnh không thành công trên Ubuntu16.04
Stephane

Đảm bảo bạn chuyển đúng tên dịch vụ, update-rc.d không cung cấp cho bạn bất kỳ phản hồi nào nếu nó không tồn tại.
hôm nay 12/12/18

Điều gì nếu bạn muốn kích hoạt lại nó sau? Bên dưới câu trả lời của @ "Không phải bây giờ" là tốt hơn, vì bạn có thể tắt và bật lại sau. update-rc.d apache2 disable
Wadih M.

54

Cấu hình các ứng dụng khởi động Linux với sysv-rc-conf :

apt-get install sysv-rc-conf

Như những người khác đã chỉ ra, đây cũng là update-rc.d cho dòng cmd.

Ví dụ: chạy

update-rc.d apache2 disable

để vô hiệu hóa apache2 từ tất cả các cấp chạy.


công cụ tuyệt vời - không biết về nó. Cảm ơn!
PEra

1
lưu ý rằng điều này sẽ không dừng dịch vụ đang chạy, để đạt được rằng bạn cần thêm điều này: service foo stophoặc khởi động lại máy chủ
rubo77

15

Ngắn:

Không có cách đáng tin cậy để làm điều này một cách nhanh chóng.

Dài:

Debian hiện tại (Debian không ổn định kể từ 2012-06-01) hiện không có cách nào đáng tin cậy để vô hiệu hóa một dịch vụ / trình nền. - Vì bản nâng cấp của gói daemon chạy vô điều kiện / hành động khởi động lại / có thể vô hiệu hóa cho runlevel hay không.

Để đảm bảo một daemon không bắt đầu, bạn có thể:

  • gỡ cài đặt nó
  • tạo một chuyển hướng cục bộ của tập lệnh /etc/init.d/xyz (theo cách này, sẽ không có công cụ nào tìm thấy nó)
  • sử dụng / lạm dụng một tập tin cấu hình của gói tương ứng để kích hoạt một lối thoát sớm của tập lệnh đó (ví dụ: đặt một lối thoát ra trước đầu vào / etc / default / xyz trong trường hợp nó có nguồn gốc từ tập lệnh init)
  • hãy tìm trong tập lệnh init đó để biết các cách chính thức được xác định trước của FTC để không bắt đầu trình nền đó

Có / là (?) Một số bước init-chính sách-một cái gì đó cho các tập lệnh init trong Debian, được cho là để lấp đầy chức năng còn thiếu này. - Tôi đã thử sử dụng nó, thấy nó phức tạp, tìm thấy một lỗi và không bao giờ chạm vào nó nữa.

Cập nhật:

Chuyển sang hệ thống của hệ thống, một giải pháp thay thế cho hệ thống khởi xướng. Một gói debian tồn tại và bạn có thể vô hiệu hóa một dịch vụ với cái gì đó như thế này:

cd /etc/systemd/system
ln -s /dev/null xyz.service

1
+1 Đây là một câu trả lời hữu ích - và nếu tôi đã không xảy ra với nó, tôi sẽ bị ném sau này - cảm ơn!

Bạn có thể chỉ unlink xyz.servicelà tốt?
jaggedsoft

@NextLocal, tôi đã quên lý do tại sao tôi viết nó, nhưng tôi tin rằng nếu một dịch vụ có tập lệnh init System V, systemdsẽ sử dụng chúng. - Vì vậy, liên kết nói với nó không tìm kiếm chúng.
Robert Siemer

Lưu ý rằng chỉnh sửa /etc/default/xyztệp để thêm exitsẽ không ngăn trình đóng gói ghi đè lên tệp với phiên bản chính xác trong lần nâng cấp tiếp theo. (Gói lưu tệp cấu hình và trong hầu hết các trường hợp, tập lệnh init không được xem như vậy.) Vì vậy, trong hầu hết các trường hợp, điều đó sẽ không giúp ích.
Alexis Wilke

Devuan đến giải cứu: thay vì systemd, nó bao trùm hệ thống S.dV RC.d / init.d cổ điển (hoặc openrc cũng như nếu ai đó phản đối điều đó).
Csaba Toth

5

Chạy lệnh này

apt-get cài đặt RC

Sau khi cài đặt, hãy chạy RCconf trong SSH và bạn sẽ nhận được một hộp thoại hiển thị tất cả các dịch vụ được thiết lập để chạy khi khởi động. Chọn những cái bằng cách nhấn Space để tắt / bật cụ thể và bạn đã hoàn tất, chỉ cần nhấp vào Ok và dịch vụ đó sẽ không bắt đầu lại khi khởi động tiếp theo. Đang sử dụng này trong nhiều năm. Công cụ rất tiện dụng cho người dùng Debian / Ubuntu như tôi.


Dễ dàng như 1,2,3! Cảm ơn cho công cụ dòng lệnh nhỏ này.
DanielaWaranie

2

Tôi bối rối những gì bạn đang cố gắng thực hiện.

Những cấp độ chạy nào bạn muốn foo chạy trong?

Nếu bạn luôn muốn nó chạy, hãy sử dụng update-rc.d foo defaults; sẽ dừng nó ở 0, 1 và 6, trong khi để nó chạy ở 2, 3, 4 và 5. (1 không nên chạy bất cứ thứ gì ngoài shell, 0 và 6 bị dừng và khởi động lại)

Nếu bạn muốn chỉ định chính xác mức độ chạy để chạy trong:

update-rc.d foo stop 0 1 6 3 . start 2 4 5 .


1

Bắt đầu sử dụng insserv từ Debian7

Xuất tất cả các dịch vụ và thông tin runlevel

insserv --showall

Xóa các tập lệnh được liệt kê khỏi tất cả các runlevels

insserv --remove [specify_script]

0

Trình quản lý khởi động của Ubuntu là loại ánh sáng sysv-rc-conf , phiên bản GUI thân thiện hơn và nhiều người đọc chủ đề này sẽ đánh giá cao điều đó.

http://www.marzocca.net/linux/bum.html


0

Trên hệ thống dựa trên mũ đỏ, bạn có thể sử dụng

chkconfig httpd off
chkconfig httpd --del

để loại bỏ máy chủ khỏi runlevels

trên hệ thống dựa trên debian, tất cả các dịch vụ được cho là bắt đầu bởi các tệp được tìm thấy trong thư mục /etc/rc?.d/ các tệp này sau đó có một liên kết tượng trưng đến các tệp tương ứng trong thư mục /etc/init.d/. Nếu bạn muốn một dịch vụ không bắt đầu theo mặc định thì bạn có thể đổi tên / xóa nó khỏi thư mục /etc/rc?.d và thay đổi của bạn sẽ được duy trì khi nâng cấp gói miễn là một trong các liên kết bắt đầu vẫn xuất hiện ở một trong các thư mục khác (3,4 và 5). Hoặc bạn có thể sử dụng lệnh update-rc.d để thay đổi (các) liên kết và nếu bạn muốn bắt đầu dịch vụ sau đó, bạn có thể sử dụng /etc/init.d/service_name bắt đầu nếu bạn rời khỏi bắt đầu, nó sẽ cung cấp cho bạn các tùy chọn có thể được sử dụng như dừng, khởi động lại, tải lại ...

Tôi nghĩ rằng bạn có thể sử dụng sysv-rc-conf để vô hiệu hóa nó mặc dù.


Câu hỏi được gắn thẻ Debian, không phải Fedora hay Red Hat.

0
sudo update-rc.d SERVICE disable

Nếu bạn muốn chỉ định cấp độ chạy.

sudo update-rc.d SERVICE disable|enable [S|2|3|4|5]

Hãy nhớ thay đổi dịch vụ thành tên của chương trình.

sudo service SERVICE restart

0

Tại sao bạn không sao lưu tập lệnh khởi động ở một nơi khác và xóa nó trong /etc/init.d/? Nếu update-rc.d không hoạt động.

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.