首页 > 解决方案 > Ansible 因 runuser 失败:找不到命令

问题描述

我正在尝试使用角色galaxyproject.postgresql配置 PostgreSQL 服务器。使用 Vagrant 框generic/centos7此角色失败并显示消息

TASK [galaxyproject.postgresql : Initialize database (RedHat >= 7)] ************
fatal: [postgresql]: FAILED! => {"changed": true, "cmd": ["/usr/pgsql-9.6/bin/postgresql96-setup", "initdb"], "delta": "0:00:00.181409", "end": "2019-10-16 01:45:59.495713", "msg": "non-zero return code", "rc": 1, "start": "2019-10-16 01:45:59.314304", "stderr": "", "stderr_lines": [], "stdout": "Initializing database ... failed, see /var/lib/pgsql/9.6/initdb.log", "stdout_lines": ["Initializing database ... failed, see /var/lib/pgsql/9.6/initdb.log"]}

该文件/var/lib/pgsql/9.6/initdb.log有以下消息

/usr/pgsql-9.6/bin/postgresql96-setup: line 143: runuser: command not found

在目标节点runuser上可用

[root@postgresql ~]# which runuser
/sbin/runuser

所以问题似乎/sbin不在PATHAnsible 在目标节点上运行时。

如何使runuser命令对 Ansible 可用?我当然不想改变外部角色galaxyproject.postgresql

当我PATH使用 Ansible 调试输出时,它显示PATH不包括 sbin。

TASK [galaxyproject.postgresql : debug] ****************************************
ok: [postgresql] => {
    "PATH": {
        "changed": true, 
        "cmd": "echo $PATH", 
        "delta": "0:00:00.010478", 
        "end": "2019-10-16 02:12:14.882341", 
        "failed": false, 
        "rc": 0, 
        "start": "2019-10-16 02:12:14.871863", 
        "stderr": "", 
        "stderr_lines": [], 
        "stdout": "/usr/local/bin:/usr/bin", 
        "stdout_lines": [
            "/usr/local/bin:/usr/bin"
        ]
    }
}

标签: postgresqlpathansible

解决方案


如果你需要在 PATH 中添加一些东西,你可以尝试为这个模块设置环境。我没有为 postgres 模块尝试过这个,但它应该可以工作:

- postgres_user: # or other module name you are using
     user: foo # and other normal arguments
  environment:
     PATH: '$PATH:/sbin'

另请参阅:https ://docs.ansible.com/ansible/latest/user_guide/playbooks_environment.html


推荐阅读