什么是修复LP:#600941引起的所有损害的最佳方法?
我问这个问题是因为在目前支持的每个Ubuntu版本中都加入了LP:#600941。我应该选择一个特定的版本并在上面运行ubuntu-bug吗?那个版本应该是LTS还是Oneiric或者Precise(如果我需要Precise,我该如何获取它?)
事情的经过是,在推出这个补丁之后,我们所有的系统都开始出现Nagios nrpe重启失败的问题。
像/etc/init.d/nagios-nrpe-server restart这样的命令会导致nrpe停止但无法重新启动。
我追踪到问题出在/etc/init.d/nagios-nrpe-server脚本调用start-stop-daemon的方式上。
问题在于/etc/init.d/nagios-nrpe-server脚本中的"stop"部分首先调用start-stop-daemon发送SIGTERM给nrpe,然后只等待一秒钟。
如果nrpe在那个时间点还没有退出,pid文件仍然存在,
更糟糕的是,如果使用
在这种情况下,尝试启动将会失败,因为nrpe仍然绑定到一个套接字,第二次绑定尝试将导致nrpe启动中止。
他们应该想知道为什么会有关于“有时候pid文件不会被删除”的注释。
他们应该在负载较重、nrpe响应时间较慢的系统上进行测试。
解决方法是在
谢谢。
我问这个问题是因为在目前支持的每个Ubuntu版本中都加入了LP:#600941。我应该选择一个特定的版本并在上面运行ubuntu-bug吗?那个版本应该是LTS还是Oneiric或者Precise(如果我需要Precise,我该如何获取它?)
事情的经过是,在推出这个补丁之后,我们所有的系统都开始出现Nagios nrpe重启失败的问题。
像/etc/init.d/nagios-nrpe-server restart这样的命令会导致nrpe停止但无法重新启动。
我追踪到问题出在/etc/init.d/nagios-nrpe-server脚本调用start-stop-daemon的方式上。
问题在于/etc/init.d/nagios-nrpe-server脚本中的"stop"部分首先调用start-stop-daemon发送SIGTERM给nrpe,然后只等待一秒钟。
如果nrpe在那个时间点还没有退出,pid文件仍然存在,
/etc/init.d/nagios-nrpe-server
脚本将会删除它。更糟糕的是,如果使用
/etc/init.d/nagios-nrpe-server restart
,不仅会删除pid文件,而且如果nrpe守护进程在关闭时仍然迟缓,尝试重新启动nrpe将会失败。在这种情况下,尝试启动将会失败,因为nrpe仍然绑定到一个套接字,第二次绑定尝试将导致nrpe启动中止。
他们应该想知道为什么会有关于“有时候pid文件不会被删除”的注释。
他们应该在负载较重、nrpe响应时间较慢的系统上进行测试。
解决方法是在
start-stop-daemon ... --stop ...
的调用中添加--retry 10
或类似的参数。谢谢。