TERM
Ich habe eine Situation, in der ein RHEL 6.4-Server Signale zu schnell sendet KILL
, bevor Anwendungen und Datenbanken die Chance hatten, ordnungsgemäß anzuhalten. Es scheint, dass Upstart die Kontrolle vorzeitig an die sysv-rc-Skripte übergibt.
Um dieses Problem zu beheben, habe ich versucht, sleep
und logger
Befehle in die Upstart-Konfiguration einzufügen. Die pre-script
Strophe schreibt ins Syslog, aber der Ruhezustand wird nie abgeschlossen, da das System innerhalb von 10 Sekunden neu startet. Ich habe auch ein hinzugefügt, kill timeout
das ignoriert wird.
# 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
Ich weiß, dass Upstart den Boot-/Haltevorgang parallelisieren sollte, aber es hat meine Debugging-Versuche nur gelähmt.
Was ist unter RHEL 6 die endgültige Reihenfolge der Skripts, die nach der Ausgabe von Folgendem ausgeführt werden: shutdown -r now
?
shutdown -r now
?????
/etc/init/rc.conf
(Emporkömmling)/etc/rc.d/rc
(sysv-rc)?????
/etc/rc3.d/K*
(sysv-rc)/etc/rc6.d/S*
(sysv-rc)?????
Wo werden die anderen /etc/init/*.conf-Skripte aufgerufen?
UPDATE: Beim Analysieren /etc/rc.d/rc
habe ich festgestellt, dass touch /var/run/confirm
der Prozess in einen interaktiven Modus wechselt, wenn ich , und dann scheinen meine Sleep- und Logger-Befehle ausgeführt zu werden. Das verwirrt mich, weil ich dachte, dass Upstart zu diesem Zeitpunkt die Kontrolle an sysv-rc übergeben hat.
Antwort1
Diese Antwort geht zwar nicht auf die Reihenfolge der Skripts ein, die beim Herunterfahren von RHEL 6 ausgeführt werden, sie löst jedoch das Problem, dass das System Prozesse beendet, bevor sie ordnungsgemäß gestoppt werden.
/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
Der Schlüssel war die Änderung start on starting rc RUNLEVEL=[016]
. Wenn Sie dieses Skript starten, während /etc/init/rc.conf
es gerade gestartet wird, blockiert es 5 Minuten lang, bevor die sysv-rc-Skripte ausgeführt werden. Hoffentlich werden während dieser 5 Minuten alle ArcSight-Datenbanken und -Anwendungen ordnungsgemäß gestoppt. Tests haben gezeigt, dass alles innerhalb von 3 Minuten gestoppt wurde, also sollten 5 Minuten eine sichere Verzögerung sein.
Es ist immer schön zu sehen, dass ein Multimillionen-Dollar-Produkt einen Kunden-Hack erfordert.