【问题标题】:Ansible service module returns service status as stopped when the service is actually runningAnsible 服务模块在服务实际运行时返回服务状态为已停止
【发布时间】:2019-09-01 10:26:29
【问题描述】:

尝试使用 ansible 2.7 停止服务(dse datastax 企业)

   - name: Stop service dse, if started
 service:
  name: dse
  state: stopped

我认为 ansible 的意思是,我没有做任何事情,因为该服务已经停止。部分详细输出:

ok: [myhostname.domain.com] => {
"changed": false,
"invocation": {
    "module_args": {
        "daemon_reload": false,
        "enabled": null,
        "force": null,
        "masked": null,
        "name": "dse",
        "no_block": false,
        "scope": null,
        "state": "stopped",
        "user": null
    }
},
"name": "dse",
"state": "stopped",

当我检查远程主机上的服务时,这就是我所看到的

[user@remotehost ~]$ service dse status
dse is running

那么我在这里错过了什么? 仅供参考,建议为此服务使用sudo service dse stop,我不知道缺少sudo 是否会产生如此大的差异。

【问题讨论】:

  • 如果您不是以root 运行,您将无法控制系统服务。尝试将become: true 添加到该任务(或剧本)中,看看它是否正常工作。

标签: cassandra ansible datastax-enterprise


【解决方案1】:

我对此的理解是因为我没有不受限制的 sudo 并且我没有能力在 /bin/sh 中执行,因此它失败了。

直接在服务器上运行同样的命令,这是因为

Ansible 发送 Python 代码以在目标服务器上执行。由于 Ansible 正在运行 Python 代码并且通常不直接执行系统命令,因此您不能使用 sudo 限制系统命令并期望它们与 Ansible 一起使用。 更多:https://gist.github.com/nanobeep/3b3d614a709086ff832a

不确定每个人都有这种奢侈,但在我的情况下修改 sudoers 文件

来自

TheGroupNameImPartOf ALL= ALL, !SU, !SHELLS

TheGroupNameImPartOf ALL= ALL

施展魔法!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多