Disabilitare un servizio partendo da tutti i runlevel?


61

Ho un servizio fooche attualmente inizia al livello 3 e superiore. Come posso impedirgli di farlo, senza usare update-rc.d foo stop 3 ., che (se lo capisco correttamente) spegnerebbe il servizio ad ogni cambio di runlevel.

(vale a dire, se fossi al runlevel 1 e abilitato foo, allora quando passerei al runlevel 3 sarebbe disabilitato, no?)

Esecuzione di Debian GNU / Linux Lenny.

Risposte:


57

Il termine "stop" non impedisce l'avvio del demone, ma piuttosto lo spegne durante l'immissione del runlevel specificato.

Se vuoi semplicemente rimuovere un servizio / demone da un singolo runlevel, update-rc.dcome sottolineato da Freiheit o semplicemente rimuovere il link simbolico da /etc/rcX.d/, dove X è il tuo runlevel. Se non vuoi che il servizio si avvii automaticamente, update-rc.d -f foo removefarà il trucco.


2
Qualche idea su come farlo su Debian 8? sudo update-rc.d -f sunrpc removenon funziona; è ancora presente dopo un riavvio.

Debian 9 Questo non funzionava per me, e poi ho capito, oh derp, ho bisogno di sudo. update-rc.d non dà alcun feedback se si dimentica di sudo. Ho confermato che i collegamenti non c'erano piùls /etc/rc*.d
Jason Dunkelberger,

Il comando non è riuscito su Ubuntu16.04
Stephane il

Assicurati di passare il nome del servizio corretto, update-rc.d non ti dà alcun feedback se non esiste.
marcovtwout,

Cosa succede se si desidera riattivarlo in un secondo momento? Di seguito la risposta di "Non ora" è migliore, poiché è possibile disabilitare e riattivare dopo. update-rc.d apache2 disable
Wadih M.

54

Configurare le applicazioni di avvio di Linux con sysv-rc-conf :

apt-get install sysv-rc-conf

Come altri hanno sottolineato, ecco anche update-rc.d per la linea cmd.

Ad esempio, esegui

update-rc.d apache2 disable

per disabilitare apache2 da tutti i livelli di esecuzione.


ottimo strumento - non lo sapevo. Grazie!
PE

1
si noti che questo non fermerà il servizio in esecuzione, per ottenere ciò che è necessario aggiungere questo: service foo stopo riavviare il server
rubo77

15

Corto:

Non esiste un modo affidabile per farlo rapidamente.

Lungo:

L'attuale Debian (Debian instabile al 01/06/2012) non ha attualmente un modo affidabile per disabilitare costantemente un servizio / demone. - Perché un aggiornamento di un pacchetto demone esegue incondizionatamente "/etc/init.d/package restart", disabilitandolo per questo runlevel o no.

Per assicurarsi che un demone non si avvii, è possibile:

  • disinstallalo
  • effettua un trasferimento locale dello script /etc/init.d/xyz (in questo modo, nessuno strumento lo troverà)
  • usa / abusa di un file di configurazione del pacchetto corrispondente per provocare un'uscita anticipata di quello script (es. metti una "uscita" all'inizio in / etc / default / xyz nel caso in cui provenga dallo script init)
  • cerca in quello script init i modi "ufficiali" predefiniti per non avviare quel demone

C'è / era (?) Un passo di init-policy-qualcosa per gli script di init in Debian, che avrebbe dovuto riempire questa funzionalità mancante. - Ho provato a usarlo, l'ho trovato complicato, ho trovato un bug e non l'ho mai più toccato.

Aggiornare:

Passa a "systemd", un'alternativa a "initd". Esiste un pacchetto debian e puoi disabilitare un servizio con qualcosa del genere:

cd /etc/systemd/system
ln -s /dev/null xyz.service

1
+1 Questa è una risposta così utile - e se non mi fossi imbattuto su di essa sarei stato punto dopo - grazie!

Puoi anche tu unlink xyz.service?
jaggedsoft,

@NextLocal, ho dimenticato perché l'ho scritto, ma credo che se un servizio ha script init System V, systemdli userà. - Quindi il link dice di non cercarli.
Robert Siemer,

Notare che la modifica del /etc/default/xyzfile per aggiungerlo exitnon impedisce al packager di sovrascrivere il file con la versione corretta al prossimo aggiornamento. (Il pacchetto salva i file di configurazione e nella maggior parte dei casi gli script init non vengono visualizzati come tali.) Quindi nella maggior parte dei casi ciò non sarebbe d'aiuto.
Alexis Wilke,

Devuan viene in soccorso: invece di systemd abbraccia il classico sistema SysV rc.d / init.d (o anche openrc se qualcuno opta per quello).
Csaba Toth,

5

Esegui questo comando

apt-get install rcconf

Una volta installato, esegui rcconf in SSH e riceverai una finestra di dialogo che mostra tutti i servizi impostati per essere eseguiti all'avvio. Seleziona quelli premendo Spazio per disabilitare / abilitare il particolare e il gioco è fatto, fai semplicemente clic su OK e quel servizio non si preoccuperà di ricominciare al prossimo avvio. Lo sto usando da anni. Strumento molto utile per gli utenti Debian / Ubuntu come me.


Facile come 1,2,3! Grazie per questo piccolo strumento da riga di comando.
DanielaWaranie,

2

Sono confuso su ciò che stai cercando di realizzare.

In quali livelli di corsa vuoi correre?

Se vuoi sempre che funzioni, usa update-rc.d foo defaults; che lo fermerà tra 0, 1 e 6, lasciandolo in esecuzione tra 2, 3, 4 e 5. (1 non dovrebbe far altro che una shell, 0 e 6 vengono fermati e riavviati)

Se si desidera specificare esattamente in quali livelli di esecuzione eseguire:

update-rc.d foo stop 0 1 6 3 . start 2 4 5 .


1

Inizia a usare insserv da Debian7

Emette tutti i servizi e le informazioni sul runlevel

insserv --showall

Rimuovi gli script elencati da tutti i runlevel

insserv --remove [specify_script]

0

Di Ubuntu Bootup Manager è sorta di sysv-rc-conf luce , un più amichevole, versione GUI, e molte persone che leggono questa discussione si renderà conto che.

http://www.marzocca.net/linux/bum.html


0

Su un sistema basato su cappello rosso è possibile utilizzare

chkconfig httpd off
chkconfig httpd --del

per rimuovere il server dai runlevel

sul sistema basato su Debian si suppone che tutti i servizi siano avviati dai file trovati nelle directory /etc/rc?.d/ questi file abbiano quindi un collegamento simbolico ai file corrispondenti nella directory /etc/init.d/. Se si desidera che un servizio non si avvii per impostazione predefinita, è possibile rinominarlo / rimuoverlo dalla directory /etc/rc?.d e la modifica verrà mantenuta durante l'aggiornamento del pacchetto purché uno dei collegamenti di avvio sia ancora visualizzato in uno dei le altre (3,4 e 5) directory. Oppure puoi usare il comando update-rc.d per cambiare i collegamenti e se vuoi avviare il servizio dopo, puoi usare /etc/init.d/service_name start se lasci l'inizio alla fine ti dà le opzioni che possono essere utilizzate come stop, riavvio, ricarica ...

Penso che puoi usare sysv-rc-conf per disabilitarlo però.


La domanda è taggata Debian, non Fedora o Red Hat.

0
sudo update-rc.d SERVICE disable

Se si desidera specificare i livelli di esecuzione.

sudo update-rc.d SERVICE disable|enable [S|2|3|4|5]

Ricorda di cambiare il servizio con il nome del programma.

sudo service SERVICE restart

0

Perché non eseguire il backup dello script di avvio da qualche altra parte e rimuoverlo in /etc/init.d/? Se update-rc.d non funziona.

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.