Puppet等待服务准备好

时间:2011-11-23 15:23:49

标签: ruby tomcat puppet

我正在使用Puppet进行机器配置。我有一个在Tomcat 6 app服务器上运行的服务,另一个清单依赖于该服务(作为安装的一部分发送一些REST请求)。问题是,使用以下命令启动tomcat后服务不可用:

service {"tomcat6":
  ensure  => running, enable => true, hasstatus => true, hasrestart => true;
}

因此,我需要一些另一个清单的需求条件,以确保服务真正运行(例如,检查某些URL是否可用)。如果它还没有准备好等待一段时间再次尝试再次尝试重新设置。

是否有一些惯用的Puppet解决方案或其他方法可以实现这一目标?

注意 - 睡眠不是解决方案。

3 个答案:

答案 0 :(得分:18)

感谢lzap和Puppet irc频道中的人们是一个解决方案:

exec {"wait for tomcat":
  require => Service["tomcat6"],
  command => "/usr/bin/wget --spider --tries 10 --retry-connrefused --no-check-certificate https://localhost:8443/service/",
}

使用require =>时在依赖清单中执行[“wait for tomcat”],在服务真正准备好之前它不会运行。

答案 1 :(得分:1)

不是傀儡,而是贝壳......

max=30; while ! wget --spider http://localhost:8080/APP > /dev/null 2>&1; do
  max=$(( max - 1 )); [ $max -lt 0 ] && break; sleep 1
done; [ $max -gt 0 ]

这是改进版。

找到应用程序时返回true,达到max时返回false。

答案 2 :(得分:0)

我知道这不是Puppet,而是:

max=30; e=1; while [ $e -ne 0 -a $max -gt 0 ]; do
  wget --spider http://localhost:8080/APP > /dev/null 2>&1
  e=$?; max=$(( max - 1 )); sleep 1
done; [ $max -ne 0 ]

你可以把它放在一行,只用semicomas连接(除了“do”语句)。