Il modo migliore per riavviare con grazia CentOS?


82

Ho sempre usato il comando:

shutdown -r now

Tuttavia, a volte ciò causa problemi di MySQL.

Qual è il modo più elegante per riavviare CentOS?

Ho visto:

reboot

e

halt

Come posso riavviare delicatamente la macchina?


3
rebootè essenzialmente un alias di shutdown -r... quindi ... sì.
Nathan C

Il mio post ha risposto alla tua domanda o hai bisogno di sapere qualcos'altro?
Joffrey,

Non posso ancora commentare qui, ma volevo inserire un avviso qui sul riavvio. Se l'istanza si trova su Amazon EC2, il riavvio -h ora eseguirà il brick dell'istanza, quindi non farlo mai. Invece, se devi arrestare o riavviare, fallo attraverso l'interfaccia online di Amazon, non la shell. Se esegui il brick dell'istanza, puoi interromperla, staccare il volume, creare un'istanza separata e collegarvi il volume, senza staccare il primo volume fornito con la nuova istanza. Quindi dovrai ssh nella nuova istanza, montare il vecchio volume e estrarre i tuoi file.
kloddant,

in realtà, si desidera eseguire sync: sync;prima di eseguire in shutdown -rmodo da sincronizzare tutto l'I / O dei file. Sospetto che questo risolverà anche il problema conmysql
user3629249,

Risposte:


96

Non esiste un modo migliore per riavviare il server utilizzando nient'altro che tali comandi.

  • l'arresto è il modo più comune per arrestare il sistema. L'aggiunta dell'argomento -re un tempo specifico (o ' now') riavvieranno il sistema invece di arrestarlo dopo la sequenza di spegnimento.
  • reboot è un round wrapper shutdown che esegue alcuni interventi di manutenzione del disco rigido (sincronizzazione e / o messa in modalità standby e non rilevante).
  • Le nuove versioni di reboot(> 2.74) verranno avviate shutdownse non nel runlevel 0 o 6.
  • La maggior parte degli script init chiama halt per fare un log in utmp .

Le moderne distribuzioni copriranno tutti i compiti indipendentemente dal comando che stai usando. Fondamentalmente tutti avviano il runtime di spegnimento degli script SysV (CentOS <7) o systemd (CentOS> = 7) (li chiamerò script init per facilità di lettura).

La chiusura mediante script di init passo dopo passo interrompe tutti i servizi registrati sotto il runlevel di solito 'S'. Gli script di init individuali possono avere un timeout, come lo script di init MySQL in CentOS. Quando viene fornito l'argomento stop e il demone non verrà arrestato per un bel po 'di tempo, lo script si fermerà e uscirà dando un errore. Il processo di spegnimento continuerà come se nulla fosse sbagliato, impiegando solo un po 'più di tempo e probabilmente stampa un avviso. Alla fine, quando tutti gli script init saranno eseguiti, accadrà l'inevitabile: tutti i processi ancora in esecuzione riceveranno un SIGTERM segnale e, dopo alcuni secondi (2 o 5), a SIGKILL. Questo ripulirà il resto prima che venga effettuata una chiamata ACPI per riavviare o spegnere realmente il sistema.

Un'eccezione sta usando il rebootcomando con l' -fopzione, questo salterà l'esecuzione degli script di init e riavvierà direttamente il sistema.

Farai meglio a risolvere la causa principale delle tue preoccupazioni: MySQL non si chiude correttamente.

Spesso ciò è dovuto all'enorme carico di lavoro che deve essere fatto prima che il demone possa essere chiuso in sicurezza. Una volta ho avuto un'istanza di MySQL con +300.000 di tabelle che impiegavano più di un'ora per uscire. Problemi simili possono essere riscontrati con sistemi che utilizzano enormi buffer e scarsa disponibilità di I / O.


31

Un grazioso arresto di Centos 6.x dovrebbe essere fatto usando il comando come root:

shutdown -h now

Ciò tenterà di arrestare tutti i servizi in esecuzione prima di arrestare il server con grazia.

L'uso di questo comando evita anche problemi con socket mySQL.

Allo stesso modo, per un riavvio grazioso:

reboot -h now

Puoi leggere una risposta precedente su una domanda simile qui:

https://stackoverflow.com/questions/20407292/centos-another-mysql-daemon-already-running-with-the-same-unix-socket


7
Penso che intendi shutdown -r now, o forse solo reboot. Il rebootcomando non ha -hun'opzione.
Michael Hampton

1
Ciao Michael, Centos 6.x ha davvero la possibilità di interrompere i servizi prima di riavviare. "shutdown -h now" è un arresto grazioso e "reboot -h now" è un riavvio grazioso. Provalo sul tuo server Centos ...
GeckoSEO

1
Oh? E cosa fa questa -hopzione? Non è nella pagina man.
Michael Hampton

2
Veramente? Hai della documentazione per questo? Perché, innanzitutto, è ciò che rebootfa a meno -h . In secondo luogo, per quanto ne so, non è affatto documentato in questo modo.
Michael Hampton

2
Il documento che hai appena collegato afferma esattamente quello che ti ho detto! rebootnon ha -hopzioni, lo shutdownfa.
Michael Hampton

2

Quando do istruzioni a distanza a utenti finali e clienti, chiedo loro di usarle poweroffper spegnere e spegnere il sistema.

Se vogliono un riavvio a caldo, suggerisco di usare il rebootcomando.

Suppongo si possa dire che l' emissioneCtrl-Alt-Delete compia anche questo;)


Non sono d'accordo con questa risposta. il riavvio e l'arresto (Ctrl-Alt-Canc) è efficace e in alcuni ambienti, come quelli che eseguono mySQL, può causare un "blocco" del socket, che richiede quindi la creazione di un nuovo socket o l'eliminazione / spostamento del socket esistente prima di ricreare un nuovo uno.
GeckoSEO,

1
@GeckoSEO È stato un suggerimento faceto riferirsi al pericolo di consentire l'abilitazione di Ctrl-Alt-Delete sui server Linux.
ewwhite,

la mia risposta, d'altra parte, non è stata generosa, stavo semplicemente cercando di chiarire la risposta per coloro che stanno cercando di risolvere questa domanda. Si prega di vedere la mia risposta precedente, spero che sia di aiuto.
GeckoSEO,

2

Uso il comando 'init 6'.

init 6 dice al processo init di arrestare tutti i processi / demoni generati come scritto nei file init (nell'ordine inverso che hanno avviato) e infine invocare il comando shutdown -r now per riavviare la macchina.

Ulteriori informazioni sono disponibili su questa domanda .


0

Ho la sensazione che questa risposta potrebbe non piacerti, ma QUESTA risposta include alcune intuizioni che nessuno degli altri considera. . . Scrivi:

Ho sempre usato il comando:

spegnimento -r ora

Tuttavia, a volte ciò causa problemi di MySQL.

Il problema qui NON è il tuo metodo di spegnimento, è il software che non è in grado di gestirlo correttamente; MySql.

L'UNICO modo in cui puoi davvero affrontarlo è sostituire MySql (PostgreSql è un ottimo sostituto) O scrivere il tuo script di spegnimento che PRIMA codifica MySql come un bambino, e quando è felice di essere chiuso, allora arresta il sistema.

... Come persona che si è specializzata nei sistemi di database per oltre 26 anni, posso dirti che è stato solo in tempi molto recenti che MySql ha iniziato a mettere insieme i suoi atti riguardanti la competenza nelle più importanti sfaccettature di ciò che i sistemi di database sono per - sicurezza / integrità dei dati. In precedenza, hanno prestato meno attenzione a questi aspetti e maggiore attenzione alle prestazioni. Ma a che serve una prestazione eccezionale se perdi dati? Su ALCUNE applicazioni, come, ad esempio, la registrazione di video in streaming Netflix nel momento in cui stai visualizzando, la fedeltà assoluta potrebbe non essere particolarmente importante - forse, anche, ai tuoi clienti PIACE il backup del video un po 'a seguito di un errore. Ma in un sistema bancario è un disastro di proporzioni epiche. Solo il proprietario dei dati può sapere cosa è giusto per loro.


1
Sostituisci mysql solo perché hai problemi a riavviare o spegnere il sistema? E l'ultima parte della soluzione non contribuisce a risolvere il problema della persona che pone la domanda
ftrujillo,

Questa risposta è parziale rispetto a mysql senza fonti o riferimenti. Non è utile nel contesto della domanda; qualsiasi software che impiega troppo tempo per uscire può causare problemi al riavvio (specialmente con systemd e i suoi timeout aggressivi).
Harald,
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.