Come disabilitare un servizio senza usare 'systemctl disable'


12

C'è un servizio che voglio eseguire solo quando un altro servizio fallisce ( [Unit] OnFailure=foo), ma non voglio che questo servizio ( foo) si avvii automaticamente all'avvio. Un'opzione è in esecuzione systemctl disable foo, ma sto cercando un altro modo.

Background: sto creando un'immagine del sistema operativo e non voglio avviare la macchina, eseguire quel comando ( systemctl disable foo), quindi spegnerlo prima di dichiarare la mia immagine finale.

Risposte:


4

Tutti i servizi sono "disabilitati" per impostazione predefinita; "abilitazione" è opt-in.

Se foo.serviceè il tuo servizio personalizzato, allora non verrà avviato se non esplicitamente inserito da qualcosa (come la OnFailure=direttiva) e non dovresti "disabilitare" nulla.


Quindi in pratica "ottieni questa funzionalità gratuitamente" a meno che foo non sia stato abilitato in precedenza?
rogerdpack

26

systemctl enablefunziona manipolando i collegamenti simbolici in /etc/systemd/system/(per i demoni di sistema). Quando sei enableun servizio, guarda le WantedBylinee nella [Install]sezione e lancia i collegamenti simbolici in quelle .wantsdirectory.

systemctl disable fa il contrario.

Puoi semplicemente rimuovere quei collegamenti simbolici: farlo a mano equivale completamente all'utilizzo systemctl disable.


Questo sarebbe un servizio che non è stato ancora gestito da systemd (è personalizzato), quindi non ci sarebbe nessuno di quei link simbolici extra. Immagino che sarebbero stati creati al primo avvio?
Tshepang,

3
@Tshepang non dovrebbe essere abilitato a meno che tu non lo abiliti manualmente (o in uno script, ovviamente)
derobert

1
Oh, ho pensato che sarebbe stato abilitato automaticamente (che è qualcosa che mi aspetto di installare i pacchetti Debian). Buono a sapersi.
Tshepang,

3
@Tshepang è lo script postinst nel pacchetto che fa un'abilitazione. Oppure suppongo che invii i symlink nel pacchetto, non sono sicuro che lo facciano.
derobert,

4

È possibile utilizzare systemctl start ServiceName.servicee systemctl stop Service.Name.serviceper avviare e arrestare un servizio rispettivamente. Al contrario di systemctl enable ...e systemctl disable ..., i comandi di avvio e arresto durano solo per la sessione corrente, quindi quando si riavvia la macchina le modifiche non verranno salvate.

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.