Ansible切换oracle用户执行Linux脚本出现sh command not found错误如何解决
报错原因
你在playbook的environment字段中自定义了PATH变量,该配置会覆盖目标用户的默认PATH,而非追加内容。你配置的PATH值仅包含/usr/sbin、Oracle相关二进制目录、/usr/local/bin,缺少系统默认的/bin、/usr/bin路径,而sh命令默认存放在这两个路径下,因此执行时无法找到命令。
手动切换oracle用户执行正常,是因为此时用户的默认PATH自带/bin、/usr/bin路径,不存在缺失问题。
解决方案
你可以任选以下任意一种方式修复:
- 补全PATH中的系统路径
在现有的PATH配置末尾追加/bin:/usr/bin即可,修改后配置如下:PATH: /usr/sbin:/oracle/oracle/app/oracle/product/12.2.0/dbhome_1/bin:/usr/local/bin:/bin:/usr/bin - 避免全量覆盖PATH,改为追加Oracle路径
直接引用Ansible采集到的目标节点默认PATH,在其基础上添加Oracle需要的二进制路径,无需手动补全系统路径:PATH: "{{ ansible_env.PATH }}:/oracle/oracle/app/oracle/product/12.2.0/dbhome_1/bin" - 直接使用sh的绝对路径调用脚本
不修改环境变量配置,直接指定sh的绝对路径执行命令:shell: /bin/sh ora_expdp_partition.sh P_05_2021
内容的提问来源于stack exchange,提问作者G16
相关产品推荐
相关产品推荐

