如何让puppet运行java程序?

时间:2014-10-24 12:11:22

标签: java puppet

我对傀儡很陌生,我很确定我犯了一些非常愚蠢的错误。但是我需要让木偶在流浪汉机器上启动德鲁伊群集。我无法找到比这更好的解决方案:

exec { "run_coordinator":
  cwd     => "/tmp/druid-services-0.6.160/",
  command => "java -Xmx256m -Duser.timezone=UTC -Dfile.encoding=UTF-8 -classpath lib/*:config/coordinator io.druid.cli.Main server coordinator",
  path    => ["/bin", "/usr/bin"],
  require => [ Exec["run_zooKeeper"] ],
}

exec { "run_historical":
  cwd     => "/tmp/druid-services-0.6.160/",
  command => "java -Xmx256m -Duser.timezone=UTC -Dfile.encoding=UTF-8 -classpath lib/*:config/historical io.druid.cli.Main server historical",
  path    => ["/bin", "/usr/bin"],
  require => [ Exec["run_coordinator"] ],
}

exec { "run_broker":
  cwd     => "/tmp/druid-services-0.6.160/",
  command => "java -Xmx256m -Duser.timezone=UTC -Dfile.encoding=UTF-8 -classpath lib/*:config/broker io.druid.cli.Main server broker",
  path    => ["/bin", "/usr/bin"],
  require => [ Exec["run_historical"] ],
}

当我跑的时候我得到了 / stage [last] / Install_druid / Exec [run_coordinator] /返回:从notrun更改为0失败:命令超出/xxx/base.pp:xxx超时 我想我可以简单地添加&但 我确信这不是最干净的方法。有什么建议吗?提前致谢。

1 个答案:

答案 0 :(得分:1)

当您使用&时,添加provider => shell可能会有效。

但是,是的,构建一个包装实际调用的简单脚本并将其分配到后台会更清晰。

#!/bin/sh

if [ "$1" == "-d" ] ; then
    $0 &
    exit 0
fi

PATH=/bin:/usr/bin

cd /tmp/druid-services-0.6.160/
java -Xmx256m -Duser.timezone=UTC -Dfile.encoding=UTF-8 -classpath lib/*:config/broker io.druid.cli.Main server broker

构建init脚本或类似服务控制器并使用服务资源会更清晰。

service {
    'druid_broker':
        ensure => 'running',
        enable => true;
}

不要从/tmp运行您的服务。那太可怕了。