Làm thế nào để loại bỏ các đơn vị systemd bị thiếu?


40

Tôi gặp khó khăn khi tìm cách xóa các đơn vị systemd không còn tệp. Họ dường như vẫn nán lại trong hệ thống bằng cách nào đó.

Các đơn vị cũ bị hỏng tôi đang cố gắng để loại bỏ:

core@ip-172-16-32-83 ~ $ systemctl list-units --all firehose-router*
  UNIT                       LOAD      ACTIVE SUB    DESCRIPTION
<E2><97><8F> firehose-router@02.service not-found failed failed firehose-router@02.service
<E2><97><8F> firehose-router@03.service not-found failed failed firehose-router@03.service

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

2 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.

Các tập tin không tồn tại, nhưng tải lại vẫn có các đơn vị này kéo dài:

core@ip-172-16-32-83 ~ $ systemctl list-unit-files firehose-router@02.service
core@ip-172-16-32-83 ~ $ sudo systemctl daemon-reload
core@ip-172-16-32-83 ~ $ systemctl list-units --all firehose-router*
  UNIT                       LOAD      ACTIVE SUB    DESCRIPTION
<E2><97><8F> firehose-router@02.service not-found failed failed firehose-router@02.service
<E2><97><8F> firehose-router@03.service not-found failed failed firehose-router@03.service

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

2 loaded units listed.
To show all installed unit files use 'systemctl list-unit-files'.

Không có tệp nào liên quan đến chúng mà tôi có thể tìm thấy:

core@ip-172-16-32-83 ~ $ sudo find /var/run/systemd -name "*firehose-router*"
core@ip-172-16-32-83 ~ $ find /etc/systemd/ -name "*firehose-router*"
core@ip-172-16-32-83 ~ $ find /usr/lib/systemd/ -name "*firehose-router*"
core@ip-172-16-32-83 ~ $

Vì vậy, làm thế nào để tôi thoát khỏi những?


Bạn không đề cập đến nó, nhưng tôi đoán nó thất bại nếu bạn cố gắng với systemctl disablehọ, phải không?
dawud

2
Nó chỉ tồn tại với 0. Không có gì để tắt (nó đã bị thiếu / bị vô hiệu hóa).
Andy Shinn

Tôi đã thử tất cả các giải pháp được đề xuất ở đây (và bên dưới cho đến nay) và khởi động lại và không có gì hoạt động. Các đơn vị tôi đang cố gắng loại bỏ đã được cài đặt hoặc cố gắng cài đặt, và sau đó apt đã bị xóa. Vì vậy, rõ ràng apt purge không loại bỏ cấu hình được cung cấp cho systemd. Tôi vẫn chưa rõ nếu các đơn vị "không tìm thấy" này gây ra bất kỳ vấn đề nào.
Chế độ xem hình elip

Tôi nghi ngờ tôi có thể xóa các tệp trong / var / lib / systemd / deb-systemd-helper-enable / nhưng tôi không chắc liệu tôi có muốn gây rối với điều này không. Tôi dường như có hai ngõ cụt đã biết ở đó: mariadb.service.dsh-cũng và mysql.service.dsh-cũng
Chế độ xem hình elip

@Elipticalview Tạo một bản sao lưu của các tệp này, chỉ trong trường hợp, và sau đó loại bỏ chúng?
gf_

Câu trả lời:


75

Lệnh bạn đang theo là systemctl reset-failed


3
Cảm ơn bạn! Tôi không biết tại sao điều đó không rõ ràng hơn đối với tôi ...
Andy Shinn

5
Điều này đã làm việc để cuối cùng làm sạch một dịch vụ "thực sự", nhưng tôi có một dịch vụ bí danh từ chối đi. Tôi đã thử disable, daemon-reloadreset-faileddịch vụ bí danh xuất hiện như not-found inactive deadmọi khi. Tôi cũng đã tìm kiếm đĩa cho bất cứ điều gì phù hợp với tên dịch vụ mà không có kết quả.
Đánh dấu Lakata

3
Tôi chỉ chạy vào đây và systemctl stop <service>làm việc cho tôi.
mpontillo

Điều tương tự cũng áp dụng cho bộ hẹn giờ - trước tiên chúng cần được dừng lại trước khi reset-failedcó thể dọn sạch chúng.
rustyx

Loại công việc cho tôi nhưng tôi phải che mặt sau đó vạch mặt trước cho một trong số họ. Ngoài ra, đã phải dừng một sau đó che dấu và vạch mặt sau đó thiết lập lại thất bại cuối cùng đã thoát khỏi tất cả.
tgunr

2

Khi systemd phân tích các tệp định nghĩa đơn vị, nó sẽ lưu ý đến bất kỳ đơn vị liên quan nào khác được gọi ra trong tệp - cho dù các đơn vị khác đó có tồn tại hay không.

$ systemctl --state=not-found --all
> ( ...prints list of 'not-found' units )

$ grep -r "<missing-unit>" /usr/lib/systemd/system
> ( returns files with references to <missing-unit> )

Khi một đơn vị hiển thị là "không tìm thấy", đó không nhất thiết là một lỗi - tất cả những gì chúng ta biết là, một định nghĩa đơn vị địa phương tuyên bố có một số mối quan hệ với nó. Mối quan hệ này có thể không phải là một trong chúng ta quan tâm. Ví dụ: nó có thể là "Before:"một số đơn vị khác, nhưng chúng tôi không sử dụng đơn vị khác đó.


0

Có vẻ như systemd duy trì các liên kết nhưng không biết phải làm gì với chúng khi bạn xóa tệp đơn vị.

Bạn có thể cố gắng loại bỏ chúng theo cách thủ công /etc/systemd/system/suspend.target.wants/và như vậy nhưng tất nhiên systemctl reset-failedtừ câu trả lời trước nghe có vẻ là một lựa chọn tốt hơn.

$ cd /etc/systemd/system
$ sudo mv lock.service /tmp 
$ sudo systemctl disable lock.service
Failed to disable unit: No such file or directory
$ sudo mv /tmp/lock.service .
$ sudo systemctl disable lock.service
Removed /etc/systemd/system/suspend.target.wants/lock.service.
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.