在大厨上,使用poise-service和poise-monit,我如何使用systemd作为底层

时间:2017-11-02 01:04:27

标签: chef monit

我的基本问题是使用术语提供程序。 Monit是运行和监控服务状态的提供商。但monit反过来依赖于系统上的提供程序来启动和停止服务 - sysinitv,upstart,systemd。

来自cookbooks/poise-monit我看到了

  

服务提供商

     

包含monit服务提供程序以允许poise_service   使用Monit作为服务管理器的资源。这使用正常   来自poise-service的sysvinit提供程序生成init脚本,但是   通过Monit管理服务状态。

现在,我想要做的是管理各种流程,例如通过Monit管理状态redis-server,但systemd执行基础管道。

我应该这样做:

#configuration file for redis
fnp_redis_conf = "#{node['redis']['conf_dir']}/redis.conf"

template fnp_redis_conf do
  source        "redis.conf.erb"
  owner         "root"
  group         "root"
  mode          "0644"
  variables     :redis => node['redis'], :redis_server => node['redis']['server']
end

#instructions for systemd
poise_service 'redis-server' do
  provider Chef::Provider::Service::Systemd
  command '/usr/local/bin/redis-server #{fnp_redis_conf}'
end

#instructions for monit to call on systemd
poise_service 'redis-server' do
  command 'systemctl start redis-server'
  provider :monit
end

很高兴:在systemd下而不是/etc/init.d/monit下启动monit 本身

环境:

macos 12 host
Ubuntu 16.04 guest
Chef Development Kit Version: 2.3.4
chef-client version: 13.4.19
delivery version: master (73ebb72a6c42b3d2ff5370c476be800fee7e5427)
berks version: 6.3.1
kitchen version: 1.17.0
inspec version: 1.36.1

1 个答案:

答案 0 :(得分:2)

您必须创建自己的服务提供者类,因为https://github.com/poise/poise-monit/blob/master/lib/poise_monit/service_providers/monit.rb是100%硬连线到sysvinit样式(因为它是它的子类)。我想我没有看到使用monit和systemd的重点,systemd已经跟踪故障单元并重新启动它们。您可以直接联系Chef社区。