好的,有一个服务 (nagios) 在 Debian 机器上运行,运行得很好,除了一个非常具体的问题,该问题仅在机器重新启动后才会出现。通过手动重新启动服务即可轻松解决该问题。问题本身是如此具体,如此令人困惑的深奥,以至于我没有时间去运行它(超过 500 次检查中的一次检查会返回一个错误,但只有当它由 nagios 运行时)。
那么,下一个最好的事情就是让它在启动时重新启动服务本身,这样就不需要每次都手动完成。到目前为止,我已尝试通过以下方式来实现这一目标:
将“/etc/init.d/nagios restart”添加到/etc/rc.local,这确实通过查看日志运行,但不能解决问题(仍然必须手动完成)
将启动 nagios 的时间移到最后(update-rc.d nagios 默认值 99 10)
回到 rc.local 修复,这次添加了“sleep 20”行,这只是延迟启动盒子 20 秒。
我还有什么可以尝试/看看的吗?
答案1
检查您想要延迟的初始化脚本是否有这样的注释块:
### BEGIN INIT INFO
# Provides: scriptname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
这个块,如 Debian 中所述LSBInit脚本wiki 告诉 init 子系统,在 nagios 脚本运行之前应该启动一些其他设施。
然后,您需要做的就是指出为什么您的nagios init脚本需要重新启动,是因为网络尚未启动吗?是因为网络服务器仍在启动吗?或者,nfs 尚未同步?
您需要找出为什么每次都需要重新启动 nagios,但这种方法是针对您的情况的最优雅的解决方案。
答案2
如果重新启动必须手动完成,那么您的检查可能取决于您登录时设置的一些变量。
检查手动运行是否service nagios restart
也可以解决您的问题,或者必须如此/etc/init.d/nagios restart
。
# Required-Start: $all
将是确保在启动脚本之前启动所有其他服务的方法。但我认为rc.local
无论如何,它都是在所有服务启动后运行的,所以它没有帮助。