Come rimuovere i servizi di systemd


181

Se installo un nuovo servizio, decido che non desidero più quell'applicazione e la elimino, il servizio è ancora elencato nell'output systemctlcome errore .

Da dove viene questo e come posso rimuoverli completamente?

Risposte:


295

La mia ricetta per la cancellazione del servizio (attenzione alle rmdichiarazioni!)

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

È possibile che il servizio systemd 'avvolga' i vecchi script di stile in /etc/init.d, quindi potresti voler ripulire anche quello, ma non è lì che vivono i servizi di systemd.


7
Tenere presente che esistono più posizioni in cui sono archiviati i file di unità Systemd, in particolare /usr/lib/systemd/systeme anche /etc/systemd/system/. Per riferimento vedere: access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/…
Mark Edington

6
Ho anche dovuto rimuovere /etc/init.d/[servicename]prima di correresystemctl reset-failed
Andrea

4
Bene, ho dimenticato di disabilitare prima di rimuovere i file dell'unità. A proposito, per trovare tutti i file di unità da rimuovere, controllo l'output di systemctl cat [servicename].
Amir,

Potrebbe essere uno script "vecchio" "avvolto" in /etc/init.d/ ma se non lo rimuovi lo troverai ancora visualizzato sotto i servizi rimasti dalla tua rimozione. Posso dirti che era il caso per me. Potresti semplicemente aggiungerlo alla tua risposta per renderlo più completo, ma spero che la prossima persona che ne avrà bisogno guarderà i commenti.
Marlon,

1
Ha funzionato, grazie, ma non sono sicuro del motivo per cui sono fatto per pulire manualmente questa spazzatura.
Rolf

25

Probabilmente stai cercando reset-failed:

$ sudo systemctl reset-failed
$

Dalla pagina man di systemd:

reset-failed [PATTERN...]

Ripristina lo stato "non riuscito" delle unità specificate o, se non viene passato alcun nome di unità, ripristina lo stato di tutte le unità. Quando un'unità si guasta in qualche modo (es. Processo in uscita con un codice di errore diverso da zero, chiusura anomala o timeout), entrerà automaticamente nello stato "non riuscito" e il suo codice di uscita e lo stato verranno registrati per introspezione dall'amministratore fino al servizio viene riavviato o ripristinato con questo comando.


2
Non è affatto questa la domanda. Perché mai questo è stato votato per 17 volte?
psusi,

1
Questa è l'unica risposta corretta. Gli altri con più voti e il segno di spunta sono soluzioni alternative.
Thomas,

1
Non ho letto la domanda del PO, ma questa era la risposta che stavo cercando.
Cugina Cocaina,

23

Sembra che tu l'abbia disinstallato, ma non hai rimosso l'hook di systemd:

# systemctl disable [servicename]


4

Aggiungendo alla risposta di @ mark-lakata e tenendo presente l'attenzione richiesta per il rmcomando. [chkconfig]può semplificare il processo! ( clicca qui per leggere su chkconfig )

Per ripetere l'iterazione dell'elenco dei comandi:

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

Nota: il primo comando è facoltativo a seconda che si desideri mantenere il servizio in esecuzione nella sessione corrente (come per questa domanda è necessario utilizzare il comando).

Il secondo comando si occupa sia di disabilitare che di rimuovere (seguendo i collegamenti simbolici) il servizio.


1
chkconfigera il comando originale per abilitare / disabilitare i servizi SysVinit. Nei sistemi che utilizzano systemd, può essere presente come comando di compatibilità con le versioni precedenti; ma il systemctlcomando nativo è altrettanto semplice:systemctl disable [servicename]
telcoM

1
Ok, ma il motivo per cui utilizzo questo comando è che non devi eseguire esplicitamente il comando rm
garlicFrancium,

1

Rimozione di un servizio da systemd:

Systemd utilizza l'unità (file per definire i servizi) per rimuovere un servizio che l'unità deve essere rimossa ... ecco un elenco di posizioni delle 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)

Aggiorna systemd:

systemctl daemon-reload
systemctl reset-failed

Servizi fantasma (non trovato):

Systemd può elencare i servizi fantasma (non trovati) anche se l'unità viene eliminata per diversi motivi

  1. l'unità è ancora presente su una delle directory systemd
  2. l'unità non si chiude ma è ancora presente un collegamento al file su una delle directory di systemd
  3. il servizio è utilizzato in altre unità *

(*) se un servizio è menzionato in un'altra unità ma non esiste, il sistema elencherà comunque quel servizio con lo stato non trovato anche se non esiste un file di unità ... puoi cercare quale unità sta usando quel servizio con una ricerca di testo e modifica quelle unità (sconsigliato se prevedi di installare quel servizio in un secondo momento)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.