Ruby 如何检查chef中是否正在运行服务?

Ruby 如何检查chef中是否正在运行服务?,ruby,chef-infra,chef-recipe,Ruby,Chef Infra,Chef Recipe,在配方文件中,我需要检查服务是否已经在运行。如果是,我需要阻止它 我有 service "apache" do supports :status => true action :stop end 任何帮助都将不胜感激。厨师是陈述式的。因此,您编写的代码与您描述的完全相同 service "apache" do supports :status => true, :restart => true, :start => true action [ :

在配方文件中,我需要检查服务是否已经在运行。如果是,我需要阻止它

我有

service "apache" do
    supports :status => true
    action :stop
end

任何帮助都将不胜感激。

厨师是陈述式的。因此,您编写的代码与您描述的完全相同

service "apache" do
  supports :status => true, :restart => true, :start => true
  action [ :start ]
end

如果服务已经在运行,它不会做任何事情。但是如果停止,它将启动服务

为什么需要检查<代码>服务“apache”执行操作:start-end应该足够了,因为如果服务正在运行,chef将检查自己。如果是的话,它将一事无成。可能很接近。德拉科的想法是对的,告诉它开始吧。如果没有,您将很快在依赖该服务的下一个命令中获得反馈。但是您可以使用chef运行系统命令,这样您就可以像在系统上一样进行服务检查,并评估信号或输出。@DracoAter检查我编辑的问题。我没有正确地提出这个问题。如果服务已启用,我需要停止它。同样的事情。你的代码应该可以工作。只是告诉它停止,如果它正在运行,它将停止,如果它已经停止,它将什么也不做。@DracoAter感谢您的反馈。是否可以使用开关箱启动和停止服务?这件事让我很难受。理想情况下,如果服务正在运行,我希望停止服务,反之亦然。是的,您可以打开
:操作
,但为什么?我不明白你的用例,有点复杂。每次我们在chef配置的实例上运行chef client时,我们的菜谱都需要在不同的时间停止和启动,以便让其他菜谱完成它们的工作,因为我们有很多依赖性。所以,我实际上是在试图从文档中理解这个“切换”状态,我什么也看不出来。我认为你不应该这样处理这个问题。如果您具有这些类型的依赖项,则应改用通知:。您可以订阅并通知事件发生之前/之后。谢谢@sethvargo。但出于知识的考虑,如果我想打开
:action
,我该怎么做呢?知道一些小事情是很好的。