Jak usunąć usługi systemowe

178

Jeśli zainstaluję nową usługę, to zdecyduję, że nie chcę tej aplikacji i usunę ją, usługa nadal będzie wyświetlana w danych wyjściowych systemctljako błąd .

Skąd to się bierze i jak mogę je dokładnie usunąć?

emel
źródło

Odpowiedzi:

288

Mój przepis na zatarcie usługi (uważaj na rmoświadczenia!)

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

Możliwe, że usługa systemowa „otacza” skrypty starego stylu w /etc/init.d, więc możesz chcieć to również wyczyścić, ale nie w tym miejscu znajdują się usługi systemowe.

Mark Lakata
źródło
7
Należy pamiętać, że istnieje wiele lokalizacji, w których przechowywane są pliki jednostek Systemd, w szczególności /usr/lib/systemd/systemi również /etc/systemd/system/. W celach
Mark Edington
6
Musiałem także usunąć /etc/init.d/[servicename]przed uruchomieniemsystemctl reset-failed
Andrea
4
Racja, zapomniałem wyłączyć przed usunięciem plików jednostek. BTW, aby znaleźć wszystkie pliki jednostek do usunięcia, sprawdzam dane wyjściowe systemctl cat [servicename].
Amir
Może to być „owinięty” skrypt w starym stylu w /etc/init.d/, ale jeśli go nie usuniesz, nadal będzie widoczny w usługach pozostałych po usunięciu. Mogę powiedzieć, że tak było w moim przypadku. Możesz po prostu dodać to do swojej odpowiedzi, aby uczynić ją bardziej kompletną, ale mam nadzieję, że następna osoba, która będzie tego potrzebowała, spojrzy na komentarze.
Marlon
1
Działało, dziękuję, ale nie jestem pewien, dlaczego jestem zmuszony do ręcznego czyszczenia tych śmieci.
Rolf
25

Prawdopodobnie szukasz reset-failed:

$ sudo systemctl reset-failed
$

Ze strony systemd:

reset-failed [PATTERN...]

Zresetuj stan „awarii” określonych jednostek lub, jeśli nie zostanie podana żadna nazwa jednostki, zresetuj stan wszystkich jednostek. Gdy jednostka w jakiś sposób ulegnie awarii (tj. Proces kończy się z niezerowym kodem błędu, kończy się nienormalnie lub kończy się limit czasu), automatycznie przejdzie w stan „awarii”, a jego kod wyjścia i status są rejestrowane do introspekcji przez administratora do momentu usługi jest ponownie uruchamiany lub resetowany za pomocą tego polecenia.

Vebjorn Ljosa
źródło
2
W ogóle nie o to pyta. Dlaczego, u licha, było to oceniane 17 razy?
psusi
1
To jedyna poprawna odpowiedź. Inne z większą liczbą głosów pozytywnych i znacznikiem wyboru są obejścia.
Thomas
1
Nie czytałem pytanie PO, ale to była odpowiedź ja szukałem.
CousinCocaine
23

Wygląda na to, że go odinstalowałeś, ale nie usunąłeś haka systemowego:

# systemctl disable [servicename]

nerdwaller
źródło
4

Dodanie do odpowiedzi @ mark-lakata i pamiętanie o uważności wymaganej do wykonania rmpolecenia. [chkconfig]może uprościć proces! ( kliknij tutaj, aby przeczytać o chkconfig )

Aby powtórzyć listę poleceń:

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

Uwaga: 1. polecenie jest opcjonalne w zależności od tego, czy chcesz, aby usługa działała w bieżącej sesji, czy nie (jak w przypadku tego pytania należy użyć polecenia).

Drugie polecenie zajmuje się zarówno wyłączeniem, jak i usunięciem (po dowiązaniach symbolicznych) usługi.

czosnek Wapń
źródło
1
chkconfigbyło oryginalnym poleceniem włączania / wyłączania usług SysVinit. W systemach używających systemdmoże występować jako polecenie kompatybilności wstecznej; ale natywna systemctlkomenda jest równie prosta:systemctl disable [servicename]
telcoM
1
Okej, ale powodem, dla którego używam tego polecenia jest to, że nie musisz wtedy jawnie uruchamiać polecenia rm
czosnku Francium
1

Usuwanie usługi z systemd:

Systemd używa jednostki (pliku do zdefiniowania usług), aby usunąć usługę, którą jednostka musi zostać usunięta ... oto lista lokalizacji jednostek:

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

Odśwież systemd:

systemctl daemon-reload
systemctl reset-failed

Usługi widma (nie znaleziono):

Systemd może wyświetlić usługi widma (nie znaleziono), nawet jeśli jednostka zostanie usunięta z wielu powodów

  1. jednostka nadal znajduje się w jednym z katalogów systemd
  2. jednostka nie kończy działania, ale łącze do pliku jest nadal obecne w jednym z katalogów systemd
  3. usługa jest używana w innych jednostkach *

(*) jeśli usługa jest wymieniona w innej jednostce, ale nie istnieje, systemd nadal będzie wyświetlać tę usługę ze stanem nie znalezionym, nawet jeśli nie ma pliku jednostki ... możesz wyszukać, która jednostka korzysta z tej usługi za pomocą wyszukiwania tekstowego i edytuj te jednostki (niezalecane, jeśli planujesz później zainstalować tę usługę)

intika
źródło