Ubuntu12.04: Come disabilitare un processo daemon all'avvio


23

Normalmente utilizzo service start/stopo initctl start/stopper avviare o arrestare un processo daemon, ma ora quello che sto cercando è disabilitare un processo daemon a partire dall'esempio di avvio mysqld.

Attualmente quello che sto facendo è rinominare /etc/init/mysql.confa /etc/init/mysql.conf.bakma dopo aver letto un po ' systemdsono venuto a sapere che essa fornisce enable & disablel'opzione per l'attività di cui sopra.

Quindi, c'è qualcosa di simile in Ubuntu 12.04 con upstart.


Dici che stai usando systemd? Lo uso sul mio computer Fedora 17. systemctl [enable|disable|is-enabled] mysqld.service
BenjiWiebe,

1
@BenjiWiebe: No, non sto usando systemd. Sto usando upstart perché systemd non è l'impostazione predefinita in Ubuntu 12.04 / 12.10.
RanRag

1
oh vedo ora ... Non sono sicuro di cosa stavo pensando.
BenjiWiebe,

Risposte:


26

È possibile disabilitare i servizi eseguendo il comando seguente:

sudo update-rc.d -f <service name> disable

Estratto della pagina man :

Quando eseguito con le opzioni disable [S | 2 | 3 | 4 | 5], update-rc.d modifica i collegamenti runlevel esistenti per lo script /etc/init.d/name rinominando i collegamenti di avvio per interrompere i collegamenti con un numero di sequenza uguale alla differenza di 100 meno il numero di sequenza originale.


2
Non ho abbastanza reputazione per votare questo e farlo senza una spiegazione sarebbe comunque scortese, quindi solo un commento: La domanda di @Noob riguarda Ubuntu 12.04 che utilizza Upstart (/etc/init/*.conf configuration file) per la maggior parte dei demoni di sistema (come menzionato da @Noob) mentre il tuo suggerimento funziona solo per i demoni ha iniziato a usare gli script in /etc/init.d/* (il vecchio stile SysV). Modifica: per la cronaca, warl0ck ha la risposta giusta (grazie!).
xolox,

3
La domanda riguarda una situazione ipotetica o in generale che usa mysql come un caso particolare di attualità. OP sembrava almeno parzialmente consapevole di questa risposta, ma può servire bene ai posteri notare che alcuni pacchetti utili non lo fanno e non onoreranno il formato di avvio (come webmin e molti pacchetti autocostruiti dai pacchetti sorgente al momento del commento) . Ciò significa che questo metodo può essere una risposta parziale valida per il contesto, proprio come fanno le risposte di warl0ck e Mark per affrontare il punto particolare dell'ipotetico servizio mysql installato con un gestore pacchetti.
Giustino

Il flag -f non è necessario.
dannyman,

20

Il modo corretto di disabilitare e avviare il servizio è creare un file XX.override,

echo 'manual' > /etc/init/mysqld.override

In questo modo il servizio di avvio non verrà avviato automaticamente


Funziona ancora con Ubuntu 12.04?
RSK

@RSK sì, perché non ci provi?
Margherita,

1
Ho provato e non ha funzionato per me. Fammi riprovare e ti aggiornerò.
RSK

No, non funziona su Ubuntu-14.04.
Ciao Angelo

1
@RSK yes, why don't you just give it a try?Suppongo, perché è molto scomodo riavviare il sistema con "una prova" per ogni consiglio da questa pagina.
user907860

7

@ warl0ck ha ragione; volevo aggiungere che queste informazioni sono documentate abbastanza bene nella documentazione di Upstart: http://upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting

In particolare:

Con Upstart 1.3, puoi utilizzare i file di override e la stanza manuale per ottenere lo stesso risultato in modo più semplice [27]:

# echo "manual" >> /etc/init/myjob.override

Si noti che è possibile ottenere lo stesso effetto in questo modo:

# echo "manual" >> /etc/init/myjob.conf

Tuttavia, l'utilizzo della funzione di override significa che è possibile lasciare intatto il file di configurazione del lavoro originale.

Per ripristinare il comportamento originale, eliminare o rinominare il file di sostituzione (o rimuovere la stanza manuale dal file ".conf").


5

C'è anche un bel software per aiutarti in questo. Si chiama rcconf.

Basta scaricarlo usando:

sudo apt-get install rcconf

e usalo con il comando

rcconf

Hai una bella interfaccia (a linea di comando) per disabilitare / abilitare i servizi.


Questo non è incluso nel sistema, quindi installa più roba non sarebbe la risposta migliore.
m3nda,

ma davvero utile: D
Magico il

1

Cerca di /etc/rc2.drinominare ciò che desideri non eseguire all'avvio: modifica la "S" (iniziale, maiuscola) in una "K" (ad esempio, S02mysqlin K02mysql). Se cambi idea, basta invertirlo. Penso che il 2 si riferisca al runlevel, nel qual caso 2 è il runlevel multiutente predefinito. Probabilmente è lì che hai la maggior parte delle cose per l'uso quotidiano del computer.

Modifica : leggi il commento di James O'Gorman di seguito.


1
Sì, "2" si riferisce al livello di esecuzione. Puoi controllare il tuo attuale livello di esecuzione usando who -ro runlevel.
RanRag

Questo è vero, who --runlevel.
Emanuel Berg,

1
Mentre questo raggiunge quello che vuoi, tecnicamente è la cosa sbagliata da fare. In termini di init SysV, gli script 'S' sono script di avvio e 'K' sono script kill - ovvero S vengono eseguiti in ordine all'avvio e K vengono eseguiti in ordine allo spegnimento (o passando a un livello inferiore).
James O'Gorman,

@ JamesO'Gorman: Interessante, sono su Debian, stai dicendo che i miei "script K" sono eseguiti allo spegnimento? Esiste una lettera che potrebbe essere utilizzata per disabilitare del tutto lo script, senza alcun rischio? (È un po 'pratico tenerli nella stessa cartella, se dovesse sorgere una nuova situazione dove li vorresti.)
Emanuel Berg,

@EmanuelBerg Sì, initeseguirà "KXXscript stop" allo spegnimento. È necessario rimuovere il collegamento simbolico o rimuovere il bit di esecuzione dallo script init reale. Credo che Debian lo usi update-rc.dper gestirlo. Utilizzo di RHEL (e derivati) chkconfig.
James O'Gorman,

0

Con Upstart la configurazione del servizio risiede nei file in /etc/init/. Ad esempio ssh è controllato usando un file di configurazione/etc/init/ssh.conf

Questo file specifica gli "eventi" che chiederanno a Upstart di avviare il "lavoro".

Per impedire l'avvio automatico di un servizio, è possibile utilizzare uno dei diversi metodi:
a) Rinominare il file service.conf in modo che non termini con .conf
b) Annotare la riga "start on" dal file service.conf.

Nelle versioni più recenti di upstart (almeno dalla v1.3) puoi anche sovrascrivere l'avvio on line usando un file service.override, così puoi usare:
# echo manual > /etc/init/service.override

Infine, puoi anche aggiungere la parola chiave "manuale" alla fine del file di configurazione del servizio, ad esempio tramite:
# echo manual >> /etc/init/service.conf

Si noti che ciò non "arresta" il servizio in esecuzione, ma ne impedisce l'avvio automatico. Mentre impostato per l'avvio "manuale" controlli il servizio usando initctl, ad esempio per arrestare e avviare il demone SSH:
# initctl stop ssh
# initctl start ssh

Probabilmente la migliore documentazione per Upstart è su http://upstart.ubuntu.com/cookbook/

La sezione 11.44 tratta "disabilitare un servizio dall'avvio automatico, qui: http://upstart.ubuntu.com/cookbook/#disabling-a-job-from-automatically-starting


0

Bene, devo dire che la dichiarazione

echo "manual" >> /etc/init/myjob.override

è un po 'fuorviante perché significa aggiungere il file override. L'ho provato il 14.04 con il gestore della rete e il seguente non ha funzionato

vim /etc/init/network-manager.override:
start
manual

Tuttavia ha funzionato

vim /etc/init/network-manager.override:
#start
manual

Quindi, IMO, initctl cerca la prima riga non commentata e la esegue. Forse mi sbaglio, ma quelli erano i miei risultati del test. Gli input sono benvenuti.

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.