ruby - Chef Recipe 的 Linux 服务状态

标签 ruby chef-infra chef-recipe chef-solo

如何从 Chef Recipe 中检查 Linux 服务的状态? 这是我的场景:

  • 我只想在服务未运行时执行一系列步骤。

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

编辑:

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

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

    service myservice status.

  • 如果服务没有安装,命令会返回

    myservice: unrecognized service

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

    run.sh (pid 10777) is running...

我想在继续安装 Chef Recipe 之前确定 myservice 的状态。

最佳答案

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

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)

然后当你想检查服务是否正在运行时使用这个助手。根据您的服务和 Linux 衍生产品,命令可能会有所不同。

关于ruby - Chef Recipe 的 Linux 服务状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25450898/

相关文章:

chef-infra - Chef : How to rollback a run of cookbook?

javascript - 如何使用 Watir 在网页中添加并执行 JavaScript 函数

ruby-on-rails - 在 id 获取记录后放置 ~

ruby - 关于性能的数据库设计问题

chef-infra - 了解 Chef only_if not_if

chef-infra - 如何让包装器说明书在定义中使用其父级模板?

ruby-on-rails - 创建 Ruby on Rails 云托管

ruby - # 鲁博科普 :disable Metrics/AbcSize

ruby - Chef 执行非顺序配方

performance - 为什么本地 Recipe 的 Chef 客户端同步很慢