Cách xóa dịch vụ systemd


181

Nếu tôi cài đặt một dịch vụ mới thì quyết định tôi không muốn ứng dụng đó nữa và xóa nó, dịch vụ vẫn được liệt kê trong đầu ra systemctldo lỗi .

Cái này đến từ đâu và làm thế nào tôi có thể loại bỏ chúng triệt để?

Câu trả lời:


295

Công thức của tôi cho việc xóa bỏ dịch vụ (hãy cẩn thận với các rmtuyên bố!)

systemctl stop [servicename]
systemctl disable [servicename]
rm /etc/systemd/system/[servicename]
rm /etc/systemd/system/[servicename] symlinks that might be related
systemctl daemon-reload
systemctl reset-failed

Có thể dịch vụ systemd 'kết thúc' các tập lệnh kiểu cũ trong /etc/init.d, vì vậy bạn cũng có thể muốn dọn sạch nó, nhưng đó không phải là nơi các dịch vụ systemd sống.


7
Xin lưu ý rằng có nhiều vị trí lưu trữ tệp đơn vị Systemd, đáng chú ý /usr/lib/systemd/systemvà cả /etc/systemd/system/. Để tham khảo, xem: access.redhat.com/documentation/en-US/Red_Hat_ Entryprise_Linux / Giả
Mark Edington

6
Tôi cũng phải gỡ bỏ /etc/init.d/[servicename]trước khi chạysystemctl reset-failed
Andrea

4
Phải, tôi quên vô hiệu hóa trước khi loại bỏ các tập tin đơn vị. BTW, để tìm tất cả các tệp đơn vị để loại bỏ, tôi kiểm tra đầu ra củasystemctl cat [servicename] .
Amir

Nó có thể là một tập lệnh kiểu cũ "được bọc" trong /etc/init.d/ nhưng nếu bạn không xóa nó, bạn sẽ thấy nó vẫn hiển thị dưới các dịch vụ còn sót lại sau khi xóa. Tôi có thể nói với bạn rằng đó là trường hợp của tôi. Bạn có thể chỉ cần thêm nó vào câu trả lời của bạn để làm cho nó đầy đủ hơn nhưng hy vọng người tiếp theo cần nó sẽ xem xét các bình luận.
Marlon

1
Điều đó đã làm việc, cảm ơn bạn, nhưng tôi không chắc tại sao tôi được tạo ra để dọn rác này bằng tay.
Rolf

25

Có lẽ bạn đang tìm kiếm reset-failed:

$ sudo systemctl reset-failed
$

Từ trang man systemd:

reset-failed [PATTERN...]

Đặt lại trạng thái "không thành công" của các đơn vị được chỉ định hoặc nếu không có tên đơn vị nào được thông qua, hãy đặt lại trạng thái của tất cả các đơn vị. Khi một đơn vị bị lỗi theo một cách nào đó (tức là quá trình thoát với mã lỗi khác không, chấm dứt bất thường hoặc hết thời gian), nó sẽ tự động nhập trạng thái "không thành công" và mã thoát và trạng thái của nó được ghi lại cho người quản trị cho đến khi dịch vụ được khởi động lại hoặc thiết lập lại với lệnh này.


2
Đó không phải là những gì câu hỏi đang yêu cầu. Tại sao trên trái đất này đã được nâng cấp 17 lần?
psusi

1
Đây là câu trả lời đúng duy nhất. Những cái khác có nhiều upvote và dấu kiểm là giải pháp.
Thomas

1
Tôi chưa đọc câu hỏi của OP, nhưng đây là câu trả lời tôi đang tìm kiếm.
CousinCocaine

23

Âm thanh như bạn đã gỡ cài đặt nó, nhưng không xóa hook systemd:

# systemctl disable [servicename]


4

Thêm vào câu trả lời của @ mark-lakata và ghi nhớ sự chu đáo cần thiết cho rmlệnh. [chkconfig]có thể đơn giản hóa quá trình! ( bấm vào đây để đọc về chkconfig )

Để lặp lại danh sách các lệnh:

  1. systemctl stop [servicename]
  2. chkconfig [servicename] off
  3. systemctl daemon-reload
  4. systemctl reset-failed

Lưu ý: Lệnh 1 là tùy chọn tùy thuộc vào việc bạn có muốn duy trì dịch vụ chạy trong phiên hiện tại hay không (đối với câu hỏi này, nên sử dụng lệnh này).

Lệnh thứ 2 đảm nhiệm cả việc vô hiệu hóa và loại bỏ (theo các liên kết tượng trưng) dịch vụ.


1
chkconfiglà lệnh ban đầu để bật / tắt dịch vụ SysVinit. Trong các hệ thống sử dụng systemd, nó có thể hiện diện như một lệnh tương thích ngược; nhưng systemctllệnh gốc chỉ đơn giản như sau:systemctl disable [servicename]
telcoM

1
Được rồi, nhưng lý do cho tôi sử dụng lệnh này là, sau đó bạn không cần phải chạy lệnh rm một cách rõ ràng
tỏiFrancium

1

Xóa dịch vụ khỏi systemd:

Systemd sử dụng đơn vị (tệp để xác định dịch vụ) để xóa dịch vụ mà đơn vị phải xóa ... đây là danh sách các vị trí đơn vị:

/etc/systemd/system/ (and sub directories)
/usr/local/etc/systemd/system/ (and sub directories)
~/.config/systemd/user/ (and sub directories)
/usr/lib/systemd/ (and sub directories)
/usr/local/lib/systemd/ (and sub directories)
/etc/init.d/ (Converted old service system)

Làm mới systemd:

systemctl daemon-reload
systemctl reset-failed

Dịch vụ ma (không tìm thấy):

Systemd có thể liệt kê các dịch vụ ma (không tìm thấy) ngay cả khi đơn vị bị xóa vì nhiều lý do

  1. đơn vị vẫn hiện diện trên một trong các thư mục systemd
  2. đơn vị không thoát nhưng liên kết tệp vẫn xuất hiện trên một trong các thư mục systemd
  3. dịch vụ được sử dụng trong (các) đơn vị khác *

(*) nếu một dịch vụ được đề cập ở đơn vị khác nhưng không tồn tại systemd vẫn sẽ liệt kê dịch vụ đó với trạng thái không tìm thấy ngay cả khi không có tệp đơn vị ... bạn có thể tìm kiếm đơn vị nào đang sử dụng dịch vụ đó bằng tìm kiếm văn bản và chỉnh sửa các đơn vị đó (không được đề xuất nếu bạn định cài đặt dịch vụ đó sau)

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.