我们通过 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_reload
:
https://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-reload
。
https://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