进一步阅读

进一步阅读

我在可视化 AIX 服务的状态时遇到了问题。因此,首先我创建一个指向将用于运行的 shell 脚本的子系统。

mkssys -s testService -p /etc/rc.d/init.d/runScriptWithCatalina.sh -u 0

现在,如果我将服务启动为 startsrc -s testService -a "start",则表明子系统已启动。

0513-059 The testService Subsystem has been started. Subsystem PID is 9502912.

而且服务确实有效。但是,当我用 检查子系统状态时 lssrc -a,它显示它不工作。我发现这背后的原因是当子系统启动时,它调用 runScriptWithCatalina.sh ,它调用 catalina.sh 脚本启动,catalina.sh 分叉并创建新进程,而子系统无法检测到它,这就是为什么它表明它不起作用。这是卡特琳娜脚本 -https://github.com/magro/msm-sample-webapp/blob/master/runtime/apache-tomcat-6.0.32/bin/catalina.sh。 tomcad.pid 文件包含与显示的子系统 PID 9502912 不同的 pid。

有没有解决方案或解决方法,或者其他方法?

答案1

系统资源控制器就其而言,显示正确的状态——它启动的 PID 现在已经退出。我对让 SRC 指示您的预期状态的最佳建议是确保脚本链exec的每个后续脚本,以便尾端 java 进程占用与初始脚本相同的 PID。

精简示例:

文件:runScriptWithCatalina.sh

# ...
exec /path/to/catalina.sh

文件:/path/to/catalina.sh

# ...
exec java ...

答案2

catalina.sh在 systemd 的恐怖屋里,今天适用于 systemd 的东西已经适用于 IBM 系统资源控制器30年。我实际上在我的一个常见答案中引用了一本 IBM 红皮书,它告诉人们编写在 SRC 下运行的守护进程的正确方法,这同样适用于其他系统,早在1995年

使用catalina.sh's bodge Poor Man's Dæmon Supervisor 和 Bad Logger 不是正确的方法。

包裹catalina.sh其他脚本是明确地这不是正确的方法。我说过不要使用该rc脚本https://unix.stackexchange.com/a/563486/5132

最好的办法就是摆脱掉catalina.sh。去掉所有“Poor Man's Dæmon Supervisor”和“Bad Logger”的东西,或者与 AIX 完全无关的东西,您会发现它所做的事情很少,只是设置一些环境变量,然后运行命令java。这个可以直接做,很多人直接它。

稍微较差的方法是使用run动词 for catalina.sh

进一步阅读

相关内容