RHEL6 Upstart:重新啟動期間的事件流程

RHEL6 Upstart:重新啟動期間的事件流程

我遇到過這樣的情況:在應用程式和資料庫有機會正常停止之前,RHEL 6.4 伺服器發送TERM訊號的速度太快。 KILLUpstart 似乎過早地將控制權交給了 sysv-rc 腳本。

為了解決這個問題,我嘗試將命令新增sleeploggerUpstart 配置中。該pre-script節正在寫入 syslog,但睡眠從未完成,因為系統會在 10 秒內重新啟動。我還添加了一個kill timeout被忽略的內容。

# 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

我知道 Upstart 應該並行化啟動/停止過程,但它只會使我的調試嘗試癱瘓。

在 RHEL 6 下,發出後執行的腳本的最終順序是什麼: shutdown -r now

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

其他 /etc/init/*.conf 腳本在哪裡被呼叫?

更新:在解剖中/etc/rc.d/rc,我發現如果我touch /var/run/confirm,進程進入互動模式,然後我的睡眠和記錄器命令似乎執行。這讓我感到困惑,因為我認為,在那時,Upstart 已經將控制權交給了 sysv-rc。

答案1

雖然這個答案沒有解決 RHEL 6 關閉期間執行腳本的順序,但它確實解決了系統在正常停止之前終止進程的問題。

/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

關鍵是修改start on starting rc RUNLEVEL=[016]。透過在剛啟動時啟動此腳本/etc/init/rc.conf,它會在執行 sysv-rc 腳本之前阻塞 5 分鐘。希望在那 5 分鐘內,所有 ArcSight 資料庫和應用程式都能正常停止。測試表明一切都在 3 分鐘內停止,因此 5 分鐘應該是安全的延遲。

看到價值數百萬美元的產品需要客戶破解總是令人高興的。

相關內容