在应用程序和数据库有机会优雅地停止之前,RHEL6.4服务器发送TERM和KILL信号的速度太快了。看起来Upstart正在过早地将控制权交给sysv脚本。
为了解决这个问题,我尝试将sleep和logger命令添加到Upstart配置中。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?shutdown -r now?????/etc/init/rc.conf (Upstart)/etc/rc.d/rc (sysv-rc)?????/etc/rc3.d/K* (sysv-rc)/etc/rc6.d/S* (sysv-rc)?????其他/etc/init/*..conf脚本在哪里调用?
更新:在剖析/etc/rc.d/rc**时,我发现如果我** touch /var/run/confirm**,流程进入交互模式,然后我的睡眠和记录器命令似乎会执行。这让我很困惑,因为我当时以为Upstart已经通过了sysv-rc.**的控制。
发布于 2013-12-26 18:09:36
虽然这个答案没有解决在RHEL 6关机期间执行脚本的顺序,但它确实解决了系统在进程被优雅地停止之前杀死它们的问题。
# 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刚刚开始时启动这个脚本,它会阻塞5分钟,然后执行sysv-rc脚本。希望在这5分钟内,所有ArcSight数据库和应用程序都会被优雅地停止。测试表明,一切都在3分钟内停止,所以5分钟应该是一个安全的延迟。
看到一款价值数百万美元的产品需要客户攻击,这总是件好事。
https://serverfault.com/questions/563238
复制相似问题