使用 Chef 时如何重新加载 systemd 服务

How to reload a systemd service when using Chef

我有一个使用 Chef 管理的 systemd 服务。

大厨如何做 systemctl daemon-reload

例如,如下所示,我可以重新加载我的服务,但这不会执行 systemctl daemon-reload。

template '/etc/systemd/system/myservice.service do
  notifies :reload,'service[myservice]', :immediately 
end

service 'myservice' do
  supports status: true ...
  action %i[start enable]
end

我们可以使用 systemd_unit resource 管理 Systemd 服务定义。这样,如果服务配置更改,它将触发重新加载 triggers_reload(默认设置为 true)属性.

由于您使用的是模板,因此您可以将 systemd_unit 资源与 reload 操作一起用于您的服务。

template '/etc/systemd/system/myservice.service' do
  notifies :reload, 'systemd_unit[myservice.service]', :immediately 
end

systemd_unit 'myservice.service' do
  action :nothing
end

其他选项是创建一个 execute 资源,运行 实际的 daemon-reload 命令:

template '/etc/systemd/system/myservice.service' do
  notifies :run, 'execute[daemon-reload]', :immediately 
end

execute 'daemon-reload' do
  command 'systemctl daemon-reload'
  action :nothing
end