Chef Recipe 中 Linux 服务的状态

Max*_*mus 3 ruby chef-infra chef-recipe chef-solo

如何从厨师菜谱检查 Linux 服务的状态?这是我的场景:

  • 仅当服务未运行时,我才想执行一系列步骤。

我想将服务的状态存储在一个变量中(如果可能的话),这样我就可以检查变量的值并相应地继续。

编辑:

详细说明我想要完成的任务。

  • 我必须将我的应用程序安装为 Chef 的 Linux 服务。
  • 但是,在安装服务之前,我想检查该服务是否已在计算机中运行。
  • 在 Linux 终端中,我会使用命令

    服务我的服务状态。

  • 如果未安装该服务,该命令将返回

    myservice:无法识别的服务

  • 如果已安装并运行,则会返回

    run.sh (pid 10777) 正在运行...

我想在继续安装厨师食谱之前确定我的服务的状态。

set*_*rgo 5

您可以创建一个像这样的简单助手:

module MyServiceChecker
  def my_service_running?
    cmd = Mixlib::ShellOut.new('/etc/init.d/my_service status')
    cmd.run_command
    cmd.exitstatus == 0
  end
end

Chef::Recipe.send(:include, MyServiceChecker)
Chef::Resource.send(:include, MyServiceChecker)
Chef::Provider.send(:include, MyServiceChecker)
Run Code Online (Sandbox Code Playgroud)

然后,当您想检查服务是否正在运行时,请使用此帮助程序。根据您的服务和 Linux 衍生版本,命令可能会有所不同。