我需要以oracle用户身份登录远程主机(Linux 2.6.39-400.210.2.el6uek.x86_64)并通过sqlplus实用程序运行一些sql脚本。使用Ansible配置:
tasks:
- name: Running oracle script
shell: "sqlplus / as sysdba @test.sql"
become: yes
become_method: sudo
become_user: oracle
但似乎登录后不会执行/ etc / profile和〜/ .profile。在oracle环境中导致设置不正确并且sqlplus不起作用。 显示错误:
fatal: [wh1.db]: FAILED! => {"changed": true, "cmd": "sqlplus / as sysdba @test.sql", "delta": "0:00:00.002729", "end": "2016-09-22 10:37:31.033209", "failed": true, "invocation": {"module_args": {"_raw_params": "sqlplus / as sysdba @test.sql", "_uses_shell": true, "chdir": null, "creates": null, "executable": null, "removes": null, "warn": true}, "module_name": "command"}, "rc": 127, "start": "2016-09-22 10:37:31.030480", "stderr": "/bin/sh: sqlplus: command not found", "stdout": "", "stdout_lines": [], "warnings": []}
如果我以oracle用户身份手动登录该框,则sqlplus工作正常。 任何想法如何使其有效? 建议设置oracle env变量并手动运行配置文件脚本,但它看起来不是很好的解决方法。
答案 0 :(得分:1)
您需要通过shell模块获取配置文件。尝试将shell命令更新为:
var date=/^[0-9]{1,2}\-[0-9]{1,2}\-[0-9]{1,4}$/;
if(!date.test(form.date.value))
alert("Enter correct date");
else
alert(" working");
我相信,一旦任务运行,配置文件就会终止。
您也可以尝试通过shell运行sudo;
shell: source /home/username/.profile && "sqlplus / as sysdba @test.sql"
根据sudo手册页:
shell: sudo -iu oracle "sqlplus / as sysdba @test.sql"
答案 1 :(得分:0)
尝试使用'su'代替'sudo'作为begin_method,并传递su的'--login'选项:
tasks:
- name: Running oracle script
command: "sqlplus / as sysdba @test.sql"
become: yes
become_method: su
become_flags: "--login"
become_user: oracle
那对我有用,但是有了Db2 ;-) 我试图运行一个Db2命令,该命令要求提供db2profile,通常是通过.profile ...发生的,并且强制登录shell通常会提供您的配置文件。
答案 2 :(得分:0)
尝试在您的剧本中使用标志“-i”:
tasks:
- name: Running oracle script
shell: "sqlplus / as sysdba @test.sql"
become: yes
become_method: sudo
become_flags: -i
become_user: oracle
-i sudo 的选项将目标用户的 shell 指定条目作为登录 shell 运行。这意味着 shell 将读取特定于登录名的资源文件,例如 .profile 或 .login。