Tengo una situación en la que un servidor RHEL 6.4 envía TERM
señales KILL
demasiado rápido, antes de que las aplicaciones y las bases de datos hayan tenido la oportunidad de detenerse correctamente. Parece que Upstart está entregando el control a los scripts sysv-rc prematuramente.
Para solucionar este problema, intenté agregar comandos sleep
y logger
en la configuración de Upstart. La pre-script
estrofa escribe en syslog, pero la suspensión nunca se completa porque el sistema se reinicia en 10 segundos. También agregué un kill timeout
que se ignora.
# cleanup at system shutdown
# Does stop all on apps, stops monit instances, then does a clean.
start on runlevel [016]
console output
kill timeout 120
task
pre-start script
logger -s -t "arcsight-services-stopall" "Running pre-start..."
/etc/init.d/arcsight_services stop
sleep 60
end script
script
logger -s -t "arcsight-services-stopall" "Running script..."
/etc/init.d/arcsight_services shutdown monit
/etc/init.d/arcsight_services clean all
end script
Sé que se suponía que Upstart paralelizaría el proceso de inicio/detención, pero solo ha paralizado mis intentos de depuración.
Según RHEL 6, ¿cuál es el orden definitivo de los scripts que se ejecutan después de su emisión? shutdown -r now
?
shutdown -r now
?????
/etc/init/rc.conf
(Advenedizo)/etc/rc.d/rc
(sysv-rc)?????
/etc/rc3.d/K*
(sysv-rc)/etc/rc6.d/S*
(sysv-rc)?????
¿Dónde se llaman los otros scripts /etc/init/*.conf?
ACTUALIZACIÓN: Al analizar /etc/rc.d/rc
, descubrí que si lo hago touch /var/run/confirm
, el proceso ingresa a un modo interactivo y luego mis comandos de suspensión y registro parecen ejecutarse. Esto me desconcierta, porque pensé que, en ese momento, Upstart había pasado el control a sysv-rc.
Respuesta1
Si bien esta respuesta no aborda el orden de los scripts que se ejecutan durante un apagado de RHEL 6, sí resuelve el problema del sistema que cancela los procesos antes de que se detengan correctamente.
/etc/init/arcsight-services-stopall.conf:
# cleanup at system shutdown
# Does stop all on apps, stops monit instances, then does a clean.
start on starting rc RUNLEVEL=[016]
task
kill timeout 330
pre-start script
logger -s -t "ArcSight" "ArcSight ESM shutdown initiated..."
/etc/init.d/arcsight_services shutdown all
/etc/init.d/arcsight_services shutdown monit
/etc/init.d/arcsight_services clean all
sleep 300
end script
script
logger -s -t "ArcSight" "ArcSight ESM shutdown complete."
end script
La clave fue modificar start on starting rc RUNLEVEL=[016]
. Al iniciar este script mientras /etc/init/rc.conf
recién se inicia, se bloquea durante 5 minutos, antes de que se ejecuten los scripts sysv-rc. Con suerte, durante esos 5 minutos, todas las bases de datos y aplicaciones de ArcSight se detendrán correctamente. Las pruebas indicaron que todo se detuvo en 3 minutos, por lo que 5 minutos debería ser un retraso seguro.
Siempre es agradable ver que un producto multimillonario requiere un truco por parte del cliente.