Ansible:切换到 su 用户并运行 tivoli db2 命令时,显示未找到命令

Ansible:切换到 su 用户并运行 tivoli db2 命令时,显示未找到命令

在服务器上手动运行 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'

相关内容