Bagaimana menghapus layanan systemd

181

Jika saya menginstal layanan baru maka memutuskan saya tidak ingin aplikasi itu lagi dan menghapusnya, layanan masih terdaftar dalam output dari systemctlsebagai kesalahan .

Dari mana ini berasal dan bagaimana cara menghapusnya secara menyeluruh?

emel
sumber

Jawaban:

295

Resep saya untuk penghapusan layanan (hati-hati dengan rmpernyataan!)

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

Mungkin saja layanan systemd 'membungkus' skrip gaya lama di /etc/init.d, jadi Anda mungkin ingin membersihkannya juga, tapi itu bukan tempat layanan systemd tinggal.

Mark Lakata
sumber
7
Ketahuilah bahwa ada beberapa lokasi tempat file unit Systemd disimpan, terutama /usr/lib/systemd/systemdan juga /etc/systemd/system/. Untuk referensi lihat: access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/…
Mark Edington
6
Saya juga harus menghapus /etc/init.d/[servicename]sebelum menjalankansystemctl reset-failed
Andrea
4
Benar, saya lupa menonaktifkan sebelum menghapus file unit. BTW, untuk menemukan semua file unit untuk dihapus, saya memeriksa output systemctl cat [servicename].
Amir
Mungkin skrip gaya lama "terbungkus" di /etc/init.d/ tetapi jika Anda tidak menghapusnya, Anda akan menemukannya masih muncul di bawah layanan yang tersisa dari penghapusan Anda. Saya dapat memberitahu Anda bahwa itu adalah kasus saya. Anda bisa menambahkan itu ke jawaban Anda untuk membuatnya lebih lengkap tetapi mudah-mudahan orang berikutnya yang membutuhkannya akan melihat komentar.
Marlon
1
Itu berhasil, terima kasih, tetapi saya tidak yakin mengapa saya harus membersihkan sampah ini secara manual.
Rolf
25

Anda mungkin mencari reset-failed:

$ sudo systemctl reset-failed
$

Dari halaman manual systemd:

reset-failed [PATTERN...]

Setel ulang status "gagal" dari unit yang ditentukan, atau jika tidak ada nama unit yang dilewati, setel ulang status semua unit. Ketika suatu unit gagal dalam beberapa cara (yaitu proses keluar dengan kode kesalahan non-nol, berakhir secara tidak normal atau kehabisan waktu), unit akan secara otomatis memasukkan status "gagal" dan kode keluar dan statusnya dicatat untuk introspeksi oleh administrator hingga layanan restart atau reset dengan perintah ini.

Vebjorn Ljosa
sumber
2
Bukan itu pertanyaannya sama sekali. Mengapa ini telah dinaikkan 17 kali?
psusi
1
Ini satu-satunya jawaban yang benar. Yang lain dengan lebih banyak upvotes dan tanda centang adalah solusi.
Thomas
1
Saya belum membaca pertanyaan OP, tetapi ini adalah jawaban yang saya cari.
CousinCocaine
23

Sepertinya Anda menghapus instalannya, tetapi tidak menghapus kait systemd:

# systemctl disable [servicename]

nerdwaller
sumber
4

Menambahkan jawaban @ mark-lakata dan mengingat perhatian yang dibutuhkan untuk rmperintah. [chkconfig]dapat menyederhanakan proses! ( klik di sini untuk membaca tentang chkconfig )

Untuk mengulangi daftar perintah:

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

Catatan: Perintah 1 bersifat opsional tergantung pada apakah Anda ingin agar layanan tetap berjalan di sesi ini atau tidak (seperti untuk pertanyaan ini, perintah harus digunakan).

Perintah ke-2 menangani penonaktifan dan penghapusan (mengikuti symlinks) layanan.

garlicFrancium
sumber
1
chkconfigadalah perintah asli untuk mengaktifkan / menonaktifkan layanan SysVinit. Dalam sistem yang menggunakan systemd, itu mungkin hadir sebagai perintah kompatibilitas mundur; tetapi systemctlperintah asli sama sederhana:systemctl disable [servicename]
telcoM
1
Oke, tapi alasan saya menggunakan perintah ini adalah, maka Anda tidak perlu menjalankan perintah rm secara eksplisit
garlicFrancium
1

Menghapus layanan dari systemd:

Systemd menggunakan unit (file untuk mendefinisikan layanan) untuk menghapus layanan yang harus dihapus unit ... berikut adalah daftar lokasi unit:

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

Segarkan sistemd:

systemctl daemon-reload
systemctl reset-failed

Layanan hantu (tidak ditemukan):

Systemd dapat mendaftar layanan ghost (tidak ditemukan) bahkan jika unit dihapus karena berbagai alasan

  1. Unit masih ada di salah satu direktori systemd
  2. unit tidak keluar tetapi tautan file masih ada di salah satu direktori systemd
  3. layanan ini digunakan di unit lain *

(*) jika suatu layanan disebutkan dalam unit lain tetapi tidak ada systemd akan tetap mendaftar layanan itu dengan status tidak ditemukan bahkan jika tidak ada file unit ... Anda dapat mencari unit apa yang menggunakan layanan itu dengan pencarian teks dan edit unit-unit tersebut (tidak disarankan jika Anda berencana untuk menginstal layanan itu nanti)

intika
sumber