【问题标题】:Stopping systemd service with salt-tack使用 salt-tack 停止 systemd 服务
【发布时间】:2016-04-10 23:08:57
【问题描述】:

我正在使用 salt-stack 来管理我的生产机器。 minions 运行 Raspbian,我和我已经配置了一个 systemd 服务。服务配置文件位于 /lib/systemd/system/my_service.service

当我运行以下命令时:

sudo salt my_minion service.stop my_service

返回如下错误:

ERROR: Unable to run command ['/etc/init.d/my_service', 'stop'] with the context {'with_communicate': True, 'shell': False, 'env': {'LANG': 'en_GB.UTF-8', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin', 'LC_ALL': 'C'}, 'stdout': -1, 'close_fds': True, 'stdin': None, 'stderr': -2, 'cwd': '/root'}, reason: [Errno 2] No such file or directory

我了解 salt 尝试使用 sysvinit 而不是 systemd。

有没有办法告诉 salt 使用 systemd?

编辑:

尝试添加

providers:
  service: systemd

按照 Eric 的建议发送到 /etc/salt/minion。还是出现同样的错误

编辑 2

使用 Erics 建议 + 将 salt-minion 从 2015.8.3 升级到 2015.8.8 解决了这个问题

【问题讨论】:

  • 检查 salt.states.services ,它说“服务的当前状态由 init/rc 脚本状态命令的返回码决定。” .只需使用 salt modules.cmd 作为解决方法。
  • 但是肯定有一个salt模块可以处理systemd服务:docs.saltstack.com/en/latest/ref/modules/all/…我就是不知道怎么用它来做salt

标签: raspbian salt-stack


【解决方案1】:

这几乎可以肯定是因为较新的 Raspbian 基于 Debian 8,并且 Salt 的 systemd 执行模块无法正确检测到较新的 Raspbian 需要 systemd。 OP 可以用sudo salt my_minion grains.items 的输出回复此消息吗?请编辑您认为有个人身份信息的任何颗粒,我主要对处理操作系统名称和版本的颗粒感兴趣。

编辑:还有一件事。请确认 /run/systemd/system 存在于 Raspbian 盒子上。我认为这里发生的是两个模块都声称是提供service 模块的模块。

https://github.com/saltstack/salt/pull/32421 应该可以解决此问题,但您可以通过将以下内容添加到您的 Raspbian minions 上的 /etc/salt/minion 来立即解决此问题(无需等待新的 Salt 版本):

providers:
  service: systemd

【讨论】:

  • 另外,stackoverflow.com/a/36479715/1200367的回复是错误的。请忽略它。
  • 我只是删除了我的回复。 XD
  • 感谢您的回复。尝试按照您的建议进行操作,仍然出现相同的错误(问题中的更多详细信息)
猜你喜欢
  • 2017-03-17
  • 1970-01-01
  • 2017-06-24
  • 1970-01-01
  • 2015-05-16
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
相关资源
最近更新 更多