SaltStack:如果服务文件发生更改,则执行“systemctl --system daemon-reload”

SaltStack:如果服务文件发生更改,则执行“systemctl --system daemon-reload”

我们通过 SaltStack 部署和更改系统服务文件。

例如,如果文件/etc/systemd/system/superfoo.service发生变化,则 systemd 会发出此警告:

Warning: Unit file of superfoo.service changed on disk, 
         'systemctl --system daemon-reload' recommended.

如何使用 salt-stack 实现自动化?

答案1

尽管@MaksaSila 确实先回答了问题,但我还是想提供更完整的解决方案。

您只需要一个 cmd.run 来处理文件更改,我使用类似的方法:

# 样本.sls

systemd 重新加载:
  命令运行:
   - 名称:systemctl --system daemon-reload
   - 更改:  
     - 文件:superbar.service

超级酒吧服务:
  文件.管理:
    - 名称:/etc/systemd/system/superbar.service

superfoo.服务:
  文件.管理:
    - 名称:/etc/systemd/system/superfoo.service
    - onchanges_in:
       -cmd:systemd-reload

后一种方法将允许您将 systemd 部分和服务部分分成不同的 SLS 文件(不要忘记在您执行的每个 sls 文件中都包含 systemd onchanges_in)。

本手册页获取有关国家关系和依赖关系的更多详细信息。

答案2

@jollyroger 的答案适用于版本 <0.15.0

从 0.15.0 开始,我们可以使用systemd_service.systemctl_reloadhttps://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.systemd_service.html#salt.modules.systemd_service.systemctl_reload

superbar.service
  file.managed:
    - name: /etc/systemd/system/superbar.service
  module.run: 
    - name: service.systemctl_reload
    - onchanges:
      - file: /etc/systemd/system/superbar.service

我相信这大大简化了代码。

[编辑] 指令“systemctl_reload”可能看起来像systemctl reload,但它在下面执行systemctl --system daemon-reloadhttps://github.com/saltstack/salt/blob/9bbbd3629418b2b086360f5b303323ec55ca0315/salt/modules/systemd_service.py#L377-L399

Saltstack 文档也明确指出

“重新加载 systemctl,这是每次更新单元文件时都需要执行的操作。”

答案3

我建议复制此文件后在您的状态下运行它:

update-systemd:
  cmd.run:
    - name: systemctl --system daemon-reload

相关内容