SaltStack:如果服务文件被更改,则执行`systemctl --system daemon-reload`

gue*_*tli 9 systemd saltstack

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

例如,如果文件/etc/systemd/system/superfoo.service被更改,则 systemd 会发出以下警告:

Warning: Unit file of superfoo.service changed on disk, 
         'systemctl --system daemon-reload' recommended.
Run Code Online (Sandbox Code Playgroud)

如何使用 salt-stack 自动执行此操作?

jol*_*ger 6

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

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

# 样本.sls

systemd-重新加载:
  cmd.运行:
   - 名称:systemctl --system daemon-reload
   - 变化:  
     - 文件:superbar.service

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

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

后一种方法将允许您将 systemd 部分和服务部分拆分为不同的 SLS 文件(不要忘记为您所做的每个 sls 文件包含 systemd onchanges_in)。

请参阅此手册页以获取有关状态关系和依赖项的更多详细信息。


clo*_*ony 6

@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
Run Code Online (Sandbox Code Playgroud)

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

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

Saltstack 文档还明确指出它

“重新加载 systemctl,这是更新单元文件时所需的操作。”

  • 我不知道¯\_(ツ)_/¯。当我第一次看到它时,这个名字也让我感到困惑。 (2认同)