编写Salt State文件启用并重跑Systemd一次性服务时遇systemd.force_reload不可用错误的技术咨询
解决Salt State中
systemd.force_reload不存在的问题 你踩了个常见的小坑——Salt里根本没有systemd.force_reload这个State函数,你把模块方法和State函数搞混啦!别担心,我们换个正确的方式实现你的需求:确保one-shot服务启用,且依赖文件变更时自动重新运行它。
修正后的Salt State代码
myown-systemd-service-unit-file: file.managed: - name: /etc/systemd/system/myown.service - source: salt://path/to/your/myown.service # 按需添加其他参数,比如user/group/mode等 myown-systemd-service-executable-file: file.managed: - name: /usr/local/bin/myown-service-script - source: salt://path/to/your/service-script.sh - mode: 0755 # 按需添加其他参数 myown-service: systemd.service: - name: myown.service - enable: True # 对应`systemctl enable myown.service`的效果 - daemon_reload: True # unit文件变更时自动重载systemd配置 - watch: - file: myown-systemd-service-unit-file - file: myown-systemd-service-executable-file - require: - file: myown-systemd-service-unit-file - file: myown-systemd-service-executable-file
关键说明
- 用
systemd.service替代无效的systemd.force_reload:这是Salt官方支持的State函数,专门用于管理systemd服务的启用、运行状态等操作,完全覆盖你的需求。 daemon_reload: True必不可少:当systemd单元文件变更时,必须先执行systemctl daemon-reload让systemd识别新配置,这个参数会自动帮你完成这一步,避免报错。watch实现依赖触发:当监听的unit文件或可执行文件发生变更时,Salt会自动触发服务的restart动作——对于one-shot服务来说,restart会重新执行一次服务,正好满足你“依赖更新就重新运行”的需求。require保证执行顺序:确保先部署好unit文件和可执行文件,再配置服务状态,避免出现依赖缺失的问题。
内容的提问来源于stack exchange,提问作者tarabyte
相关产品推荐
相关产品推荐

