找不到通过puppet exec命令执行的服务器进程

时间:2014-08-22 13:21:17

标签: wso2 puppet

我通过puppet master在代理计算机中启动服务器。这是我使用的exec命令(注意:这是使用收集器调用的)

Change_config::Fill_template<| |> -> Exec<| title == "strating" |>

exec { "strating":
user        => 'root',
environment => "JAVA_HOME=/home/ubuntu/tools/jdk1.6.0_45",
path        => $command_path,
command     => "sh ${agentLocation}/${product_pack}/bin/wso2server.sh ${serverOptions}",
logoutput => true,
timeout => 3600,
}

然后我登录代理机器并打开我启动的服务器日志。服务器日志表示服务器已启动并正在运行

[2014-08-22 13:05:47,717]  INFO    {org.wso2.carbon.core.transports.http.HttpsTransportListener} -  HTTPS port       : 9443
[2014-08-22 13:05:47,718]  INFO {org.wso2.carbon.core.transports.http.HttpTransportListener} -  HTTP port        : 9763
[2014-08-22 13:05:49,468]  INFO {org.wso2.carbon.core.init.JMXServerManager} -  JMX Service URL  : service:jmx:rmi://localhost:11111/jndi/rmi://localhost:9999/jmxrmi
[2014-08-22 13:05:49,469]  INFO {org.wso2.carbon.core.internal.StartupFinalizerServiceComponent} -  Server           :  WSO2 Message Broker-2.2.0
[2014-08-22 13:05:49,469]  INFO {org.wso2.carbon.core.internal.StartupFinalizerServiceComponent} -  WSO2 Carbon started in 23 sec
[2014-08-22 13:05:49,714]  INFO {org.wso2.carbon.ui.internal.CarbonUIServiceComponent} -  Mgt Console URL  : https://10.0.2.82:9443/carbon/

但是当我使用netstat -ntlp检查端口时,它没有显示端口。 (正常用户和root用户)。除日志外没有服务器的迹象。 最后,我在我的代理中再次手动启动服务器然后我可以观察到端口(通常这应该给出一个例外,因为我试图使用现有的端口,如果puppet已成功启动服务器。但它没有给出任何例外)

这是奇怪的情况。我无法理解为什么我看不到通过木偶启动的服务器证据。你能告诉我这种行为的线索吗?

注意:当我在代理节点内手动运行'puppet agent --test'时,它启动服务器,我可以看到端口绑定。我怀疑问题是当代理在启动守护程序中获取目录时。

1 个答案:

答案 0 :(得分:0)

Exec的超时到期时,代理很可能会终止服务器。它可能足够强大,以至于服务器不会记录关闭。之后您可以再次手动启动服务器,因为此时它已不再运行。

您应该通过Service资源管理服务。为此,最好为您的环境创建适当的服务控制脚本,但Service资源类型足够灵活,可以处理 ad hoc 服务的工作,例如您当前的服务。这样的事情可能会这样做:

service { 'wso2service':
  ensure     => 'running',
  hasstatus  => false,
  hasrestart => false,
  start      => "/bin/sh ${agentLocation}/${product_pack}/bin/wso2server.sh ${serverOptions}",
  stop       => "/usr/bin/killall wso2server.sh",
  pattern    => 'wso2server\.sh'
}

但实际上,创建一个适当的initscript,或者系统使用的任何initscript模拟。然后你可以将其简化为

service { 'wso2service':
  ensure     => 'running',
}