1
如何使用Chef确保服务正在运行?
我处在Chef可能启动服务(postgres)但后来可能带外停止的情况。我希望随后的Chef运行以使服务运行。我已经试过了: service "postgresql" do action :start end 但这没什么效果,(up to date)大概是因为Chef知道它已经启动并且无法告诉它已经停止了。(可能是由于service ... status该服务的行为方式?)如果我这样写: # anti-pattern warning! execute "force-start-postgresql" do command "service postgresql start || /etc/init.d/postgresql start" action :run end 我得到了期望的行为。也action :restart使其运行。但是,由于可移植性,它们看起来像是反模式(在后一种情况下,有可能在再次启动之前将其停止)。 那么,即使我认为该服务已经在运行,我如何告诉Chef强行启动该服务呢? 这使用的是由OpsCode托管的Chef 11.6,以及默认的postgresql配方。(请注意,这是相似的,但我认为与如何在Chef中对“最新”资源强制执行操作并不完全相同。) --- 编辑(jtimberland发布后的说明)--- 在-l debug这里显示: DEBUG: service[postgresql] supports status, running DEBUG: service[postgresql] is running 即使它没有运行。所以这听起来像是一个错误,我对此很感兴趣。但是,我主要对是否有一种方法告诉Chef“总是调用服务启动命令,跳过状态检查”感兴趣。这就是这里的问题。 (我不是专家,但我想,以确保服务的最简便的方式在运行时启动该服务,这就是几乎总是幂等。OTOH 检查服务是否正在运行是不太一致,我不明白为什么我们要关心!)