1

我正在调用 Chef 中的服务以启动 weblogic nodemanager。我们有一个 init.d 脚本 ( service nodemanager start),它对 nodemanager 进行以下调用:

su weblogic -c /opt/ora/mw/wlserver_10.3/server/bin/startNodeManager.sh &

我们正在运行一个简单的测试配方,如下所示:

service "nodemanager" do
  action :start
end

我们可以看到确实节点管理器脚本正在被调用/启动,但是一旦 chef-client 运行完成,它就会终止节点管理器脚本。我们似乎尝试了守护进程nohup的所有组合,但无济于事。任何想法为什么在厨师客户退出时脚本被杀死?

4

1 回答 1

4

使用“&”意味着它将当前命令作为子进程在后台运行,但仍附加到当前进程。这意味着一旦由 chef-client 启动的父进程退出,所有子进程都将获得 SIGNUP。所以节点管理器脚本不会被杀死。您可以通过检查PIDPPIDps aux列来验证这一点。

理想的修复方法是使用daemon在您的 init.d 脚本中没有 tty 的专用用户/组下运行您的节点管理器。

快速解决方法是使用nohup

su nohup weblogic -c /opt/ora/mw/wlserver_10.3/server/bin/startNodeManager.sh &>/dev/null &
于 2013-10-16T01:33:52.520 回答