在服务器上手动运行 db2 命令时可以正常工作。但是使用 ansible 执行时会切换到用户但无法运行 db2 命令。我整天都困在这个问题上。任何建议都会非常有帮助。
任务项:
- name: Connect to tsmdb1 database
become: true
become_user: user
shell: 'db2 connect to tsmdb1'
args:
chdir: /opt/tivoli/tsm/tsmmp/cfg
register: Connect_tsmdb1
ignore_errors: true
输出:
fatal: [user]: FAILED! => {
"changed": true,
"cmd": "db2 connect to tsmdb1",
"delta": "0:00:00.142899",
"end": "2019-05-27 17:00:57.885281",
"invocation": {
"module_args": {
"_raw_params": "db2 connect to tsmdb1",
"_uses_shell": true,
"argv": null,
"chdir": "/opt/tivoli/tsm/tsmmp/cfg",
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"stdin_add_newline": true,
"strip_empty_ends": true,
"warn": true
}
},
"msg": "non-zero return code",
"rc": 127,
"start": "2019-05-27 17:00:57.742382",
"stderr": "/bin/sh: db2: command not found",
"stderr_lines": [
"/bin/sh: db2: command not found"
],
"stdout": "",
"stdout_lines": []
答案1
"stderr": "/bin/sh: db2: command not found",
在常规 $PATH 中找不到 db2 命令。您的用户可能在某个配置文件中有一些内容可以确保您能找到 db2 可执行文件。
您有两个选择:
如果您只需要路径而不需要设置其他变量,请通过登录并运行找出可执行文件的位置type db2
然后在您的 ansible shell 中使用完整路径:
shell: '/path/to/db2 connect to tsmdb1'
或者您可能需要在提供 db2 信息的任何文件中使用其他环境变量。找出它是哪一个(可能是 /etc/profile 、 ~/.bashrc ,...)并获取它:
shell: '. /home/user/.bashrc && db2 connect to tsmdb1'