init.d 脚本与 tomcat6 的服务调用之间的输出差异

init.d 脚本与 tomcat6 的服务调用之间的输出差异

我使用 将一台 12.04 机器升级到 14.04 do-release-upgrade。一切顺利,像往常一样,但是这台特定的机器后来出现了一个非常奇怪的问题;

查看输出service tomcat6 status

root@box:/etc# service tomcat6 status
 * Tomcat servlet engine is running with pid 8763
root@box:/etc# service tomcat6 status
 * Tomcat servlet engine is running with pid 8763
root@box:/etc# service tomcat6 status
 * Tomcat servlet engine is running with pid 8763
root@box:/etc# service tomcat6 status
 * Tomcat servlet engine is running with pid 8763

一致且正确。(tomcat6确实作为 PID 8763 运行)。

然而,脚本/etc/init.d/tomcat6始终报告不同的结果:

root@box:/etc# /etc/init.d/tomcat6 status
 * Tomcat servlet engine is not running, but pid file exists.
root@box:/etc# /etc/init.d/tomcat6 status
 * Tomcat servlet engine is not running, but pid file exists.
root@box:/etc# /etc/init.d/tomcat6 status
 * Tomcat servlet engine is not running, but pid file exists.
root@box:/etc# /etc/init.d/tomcat6 status
 * Tomcat servlet engine is not running, but pid file exists.

这很奇怪,因为由于缺少脚本upstartinit.d脚本实际上是service呼叫用来获取信息的工具。删除init.d脚本可以确认:

root@box:/etc# mv /etc/init.d/tomcat6 /root/
root@box:/etc# service tomcat6 status
tomcat6: unrecognized service
root@box:/etc# mv /root/tomcat6 /etc/init.d/
root@box:/etc# service tomcat6 status
 * Tomcat servlet engine is running with pid 8763

不幸的是,我使用的 Puppet 模块调用了/etc/init.d/tomcat6,因此每 30 分钟就会报告服务中断,并执行重新启动。更新 Puppet 模块以使用 调用service是直接且明显的解决方案,但这并不能解释或修复同一个脚本可能有两种可能的结果(具体取决于脚本的调用方式)。

有人能解释为什么会发生这种情况和/或告诉我如何使结果恢复一致状态吗?

相关内容