RHEL6 Upstart: Ereignisablauf beim Neustart

RHEL6 Upstart: Ereignisablauf beim Neustart

TERMIch 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, sleepund loggerBefehle in die Upstart-Konfiguration einzufügen. Die pre-scriptStrophe 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 timeoutdas 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?

  1. shutdown -r now
  2. ?????
  3. /etc/init/rc.conf(Emporkömmling)
  4. /etc/rc.d/rc(sysv-rc)
  5. ?????
  6. /etc/rc3.d/K*(sysv-rc)
  7. /etc/rc6.d/S*(sysv-rc)
  8. ?????

Wo werden die anderen /etc/init/*.conf-Skripte aufgerufen?

UPDATE: Beim Analysieren /etc/rc.d/rchabe ich festgestellt, dass touch /var/run/confirmder 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.confes 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.

verwandte Informationen