无法通过Ansible Playbook运行DB2脚本问题求助
解决Ansible执行DB2脚本时db2: not found的问题
方案1:移除不必要的become操作
你的inventory中node2已经指定用db2inst1用户登录,无需再通过su切换用户。修改Playbook:
- hosts: node2 tasks: - name: execute DB2 script register: result changed_when: true shell: chdir: /data/db2script/ cmd: ./script.sh - debug: msg: "{{ result.stdout }}"
直接用SSH登录的db2inst1用户执行脚本,会自动加载该用户的登录环境变量,包含DB2的路径配置。
方案2:若必须切换用户,强制加载登录环境
如果因业务需求必须保留become操作,需要让su模拟登录shell(触发加载~/.profile或~/.bash_profile),添加become_flags参数:
- hosts: node2 tasks: - name: change current directory and execute command register: result become: true become_method: su become_user: db2inst1 become_flags: "-" # 关键:su - 会加载登录环境变量 changed_when: true shell: chdir: /data/db2script/ cmd: ./script.sh - debug: msg: "{{ result.stdout }}"
su - username会启动登录shell,自动加载DB2安装后配置的环境变量(通常位于/home/db2inst1/sqllib/db2profile)。
方案3:在脚本中手动加载DB2环境变量
直接修改script.sh,在开头添加环境变量加载命令:
#!/bin/bash # 加载DB2环境变量,路径根据实际安装位置调整 source /home/db2inst1/sqllib/db2profile db2 connect to <DB Name>
这样无论用什么方式执行脚本,都会先加载DB2的命令路径,避免出现db2: not found的错误。
内容的提问来源于stack exchange,提问作者varul jain
相关产品推荐
相关产品推荐

