Bagaimana cara menghapus unit systemd yang hilang?


40

Saya mengalami kesulitan mencari tahu cara menghapus unit systemd yang tidak lagi memiliki file. Mereka tampaknya masih tertinggal dalam sistem entah bagaimana.

Unit rusak lama yang saya coba hapus:

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'.

File tidak ada, namun reload masih memiliki unit-unit ini melekat:

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'.

Tidak ada file yang terkait dengan mereka yang dapat saya temukan:

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 ~ $

Jadi, bagaimana saya menyingkirkan ini?


Anda tidak menyebutkannya, tapi saya kira itu gagal jika Anda mencobanya systemctl disable, kan?
dawud

2
Itu hanya ada dengan 0. Tidak ada yang dinonaktifkan (sudah hilang / dinonaktifkan).
Andy Shinn

Saya mencoba semua solusi yang disarankan di sini (dan di bawah sejauh ini) dan reboot dan tidak ada yang berhasil. Unit yang saya coba hapus pernah dipasang atau mencoba untuk menginstal, dan kemudian apt dibersihkan. Jadi sepertinya apt purge tidak menghapus konfigurasi yang diberikan ke systemd. Masih belum jelas bagi saya jika unit "tidak ditemukan" ini menimbulkan masalah.
Tampilan elips

Saya kira saya mungkin bisa menghapus file di / var / lib / systemd / deb-systemd-helper-enabled / tetapi saya tidak yakin apakah saya ingin mengacaukannya. Saya tampaknya memiliki dua jalan buntu yang dikenal di sana: mariadb.service.dsh-juga dan mysql.service.dsh-juga
Tampilan elips

@ Elipticalview Buat cadangan file-file ini, untuk berjaga-jaga, dan kemudian hapus ini?
gf_

Jawaban:


76

Perintah yang Anda cari adalah systemctl reset-failed


3
Terima kasih! Saya tidak tahu mengapa itu tidak lebih jelas bagi saya ...
Andy Shinn

6
Ini bekerja untuk akhirnya membersihkan layanan "nyata", tetapi saya memiliki layanan alias yang menolak untuk pergi. Saya mencoba disable, daemon-reloaddan reset-failedtetapi layanan alias muncul seperti not-found inactive deadbiasa. Saya juga mencari disk apa pun yang cocok dengan nama layanan tanpa hasil.
Mark Lakata

3
Saya hanya mengalami ini dan systemctl stop <service>bekerja untuk saya.
mpontillo

Hal yang sama berlaku untuk timer - mereka harus dihentikan terlebih dahulu sebelum reset-faileddapat membersihkannya.
rustyx

Agak bekerja untuk saya, tetapi saya harus topeng kemudian membuka kedok pertama untuk salah satu dari mereka. Juga, harus berhenti satu lalu tutup dan buka topeng setelah reset-gagal akhirnya menyingkirkan semua.
tgunr

2

Ketika systemd menganalisis file definisi unit, perlu dicatat setiap unit terkait lainnya yang dipanggil dalam file - apakah unit lain itu ada atau tidak.

$ 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> )

Ketika sebuah unit muncul sebagai "tidak ditemukan", itu tidak selalu merupakan kesalahan - yang kita tahu adalah, definisi unit lokal mengklaim memiliki beberapa hubungan dengannya. Hubungan ini mungkin bukan yang kita pedulikan. Misalnya, itu bisa berupa "Before:"unit lain, tetapi kami tidak menggunakan unit lain itu.


0

Tampaknya systemd memelihara tautan tetapi tidak tahu apa yang harus dilakukan dengan mereka ketika Anda menghapus file unit.

Anda dapat mencoba untuk menghapusnya secara manual /etc/systemd/system/suspend.target.wants/dan semacamnya tetapi tentu saja systemctl reset-faileddari jawaban sebelumnya sepertinya pilihan yang lebih baik.

$ 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.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.