postgresql - 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
不在PATH
Ansible 在目标节点上运行时。
如何使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"
]
}
}
解决方案
如果你需要在 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
推荐阅读
- php - How to parse nslookup result by regex
- r - 当我在 R 中转换为日期格式时,日期会提前 2 天
- java - 由@JsonIdentityInfo 序列化的对象的反序列化
- nginx - 多个站点的 nginx 配置一个 ip 地址和一个服务器
- javascript - Babel 7 (webpack) 转换为大多数向后兼容的代码
- ios - 下标数组改变坐标
- python - 在 Pandas 中混合 DataFrame
- sql - 来自不同表的列的总和
- android - adb push 命令只读文件系统的问题
- function - Cassandra 分区键