¿La mejor manera de reiniciar con gracia CentOS?


82

Siempre usé el comando:

shutdown -r now

Sin embargo, a veces eso causa problemas con MySQL.

¿Cuál es la forma más elegante de reiniciar CentOS?

He visto:

reboot

y

halt

¿Cómo puedo reiniciar suavemente la máquina?


3
rebootes esencialmente un alias para shutdown -r... entonces ... sí.
Nathan C

¿Mi publicación respondió a su pregunta o necesita saber algo más?
Joffrey

No puedo comentar aquí todavía, pero quería colocar una advertencia aquí sobre el reinicio. Si la instancia está en Amazon EC2, reiniciar -h ahora bloqueará la instancia, así que nunca haga esto. En cambio, si tiene que apagar o reiniciar, hágalo a través de la interfaz en línea de Amazon, no desde el shell. Si bloquea su instancia, puede detenerla, separar el volumen, crear una instancia separada y adjuntarle el volumen, sin separar el primer volumen que vino con la nueva instancia. Luego, deberá ingresar a la nueva instancia, montar el volumen anterior y quitar los archivos.
kloddant

en realidad, desea ejecutar sync: sync;antes de ejecutar shutdown -rpara que todas las E / S de archivos se sincronicen. Sospecho que esto también aclarará el problema conmysql
user3629249

Respuestas:


96

No hay mejor manera de reiniciar su servidor utilizando otra cosa que cualquiera de esos comandos.

  • apagar es la forma más común de detener su sistema. Agregar el argumento -ry un tiempo específico (o ' now') reiniciará su sistema en lugar de detenerlo después de la secuencia de apagado.
  • reiniciar es un cierre de envoltura que realiza un mantenimiento de disco duro (sincronización y / o puesta en modo de espera y no es realmente relevante).
  • Las nuevas versiones de reboot(> 2.74) se iniciarán shutdownsi no están en el nivel de ejecución 0 o 6.
  • La mayoría de los guiones de inicio llaman a detener para hacer un inicio de sesión utmp .

Las distribuciones modernas tendrán todas las tareas cubiertas, independientemente del comando que esté utilizando. Básicamente, todos inician el tiempo de ejecución de apagado de sus scripts SysV (CentOS <7) o systemd (CentOS> = 7) (los llamaré scripts de inicio para facilitar la lectura).

Al cerrar usando scripts de inicio paso a paso, detenga todos sus servicios registrados bajo el nivel de ejecución 'S'. Las secuencias de comandos de inicio individuales pueden tener un tiempo de espera, como la secuencia de comandos de inicio MySQL en CentOS. Cuando se da el argumento de detención y el demonio no se cerrará en un período de tiempo razonable, el script se detendrá y saldrá dando un error. El proceso de apagado continuará como si nada estuviera mal, solo tomará un poco más de tiempo y probablemente imprima una advertencia. Al final, cuando se ejecutan todos los scripts de inicio, sucederá lo inevitable: todos los procesos que aún se ejecutan recibirán una SIGTERM señal y, después de unos segundos (2 o 5), a SIGKILL. Esto limpiará el resto antes de que se realice una llamada ACPI para realmente reiniciar o apagar su sistema.

Una excepción es usar el rebootcomando con la -fopción, esto omitirá la ejecución de scripts de inicio y reiniciará el sistema directamente.

Será mejor que solucione la causa raíz de sus preocupaciones: MySQL no se cierra correctamente.

A menudo, esto se debe a la enorme carga de trabajo que debe hacerse antes de que el demonio pueda salir de forma segura. Una vez tuve una instancia de MySQL con +300,000 tablas que tardó más de una hora en salir. Se pueden encontrar problemas similares con sistemas que utilizan enormes memorias intermedias y escasa disponibilidad de E / S.


31

Se debe realizar un apagado correcto de Centos 6.x utilizando el comando como root:

shutdown -h now

Esto intentará detener todos los servicios en ejecución antes de apagar el servidor correctamente.

El uso de este comando también evita problemas de socket mySQL.

Del mismo modo, para un reinicio elegante:

reboot -h now

Puede leer una respuesta anterior sobre una pregunta similar aquí:

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


77
Creo que te refieres shutdown -r now, o tal vez solo reboot. El rebootcomando no tiene una -hopción.
Michael Hampton

1
Hola Michael, Centos 6.x tiene la opción de detener los servicios antes de reiniciar. "shutdown -h now" es un apagado elegante, y "reiniciar -h ahora" es un reinicio elegante. Pruébelo en su servidor Centos ...
GeckoSEO

1
¿Oh? ¿Y qué hace esta -hopción? No está en la página del manual.
Michael Hampton

2
De Verdad? ¿Tienes alguna documentación para esto? Porque, primero, eso es lo rebootque prescinde -h . En segundo lugar, no está documentado de esa manera, por lo que puedo decir.
Michael Hampton

2
¡El documento que acabas de vincular dice exactamente lo que te he estado diciendo! rebootno tiene -hopción, lo shutdownhace.
Michael Hampton

2

Al dar instrucciones remotas a usuarios finales y clientes, les doy instrucciones para que las usen poweroffpara apagar y apagar el sistema.

Si quieren un reinicio en caliente, les sugiero que usen el rebootcomando.

Supongo que se podría decir que la emisiónCtrl-Alt-Delete también logra esto;)


No estoy de acuerdo con esta respuesta. reiniciar y apagar (Ctrl-Alt-Delete) es contundente y puede en algunos entornos, como los que ejecutan mySQL, causar un "bloqueo" del socket, que luego requiere crear un nuevo socket o eliminar / mover el socket existente antes de recrear un nuevo uno.
GeckoSEO

1
@GeckoSEO Fue una sugerencia graciosa que se refería al peligro de permitir que Ctrl-Alt-Delete se habilitara en servidores Linux.
ewwhite

mi respuesta por otro lado no fue graciosa, simplemente estaba tratando de aclarar la respuesta para aquellos que están tratando de resolver esta pregunta. Por favor, vea mi respuesta anterior, espero que ayude.
GeckoSEO

2

Yo uso el comando 'init 6'.

init 6 le dice al proceso init que apague todos los procesos / daemons generados como están escritos en los archivos init (en el orden inverso en que comenzaron) y finalmente invoque el comando shutdown -r now para reiniciar la máquina.

Se puede encontrar más información sobre esta pregunta .


0

Tengo la sensación de que puede que no le guste esta respuesta, pero ESTA respuesta incluye alguna idea que ninguno de los otros considera. . . Usted escribe:

Siempre usé el comando:

apagado -r ahora

Sin embargo, a veces eso causa problemas con MySQL.

El problema aquí NO es su método de apagado, es la pieza de software que no puede manejar un apagado correctamente; MySql.

La ÚNICA forma en que realmente puede abordar esto es reemplazar MySql (PostgreSql es un gran reemplazo) O escribir su propio script de apagado que PRIMERO codifica a MySql como un bebé, y cuando está feliz de apagarse LUEGO apaga el sistema.

... Como una persona que se ha especializado en sistemas de bases de datos durante más de 26 años, puedo decirle que solo en tiempos muy recientes MySql ha comenzado a actuar en relación con la competencia en las facetas más importantes de los sistemas de bases de datos. para - seguridad / integridad de los datos. Anteriormente, han prestado menos atención a estos aspectos y más atención al rendimiento. Pero, ¿de qué sirve un gran rendimiento si pierde datos? En ALGUNAS aplicaciones, como, por ejemplo, la grabación de video en streaming de Netflix en el punto que está viendo, la fidelidad absoluta puede no ser particularmente importante, tal vez, incluso, a sus clientes les gusta que el video retroceda un poco después de una falla. Pero en un sistema bancario, es un desastre de proporciones épicas. Solo el propietario de los datos puede saber qué es lo mejor para ellos.


1
¿Reemplazar mysql solo porque los problemas reinician o apagan el sistema? Y la última parte de la solución no aporta nada para resolver el problema de la persona que hace la pregunta
ftrujillo

Esta respuesta está sesgada contra mysql sin fuentes ni referencias. No es útil en el contexto de la pregunta; cualquier software que tarde demasiado en salir puede causar problemas al reiniciar (especialmente con systemd y sus tiempos de espera agresivos).
Harald
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.