Невозможно запустить скрипт, несмотря на повышение привилегий в Ansible - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь запустить скрипт оболочки на хост-машине после того, как скопировал его туда с помощью ansible.Сценарий имеет разрешения 777.

Пожалуйста, прочитайте приведенный ниже вопрос, так как он дает полный объем реальной проблемы, с которой мы пытаемся разобраться

Установка различных переменных среды ORACLE_HOME и PATHиспользование Ansible

- name: Run the Script [List]
  shell: "/tmp/sqlscript/sql_select.sh {{item}} >> /tmp/sqlscript/output.out"
  become: yes
  become_method: sudo
  become_user: oracle
  register: orh
  with_items: "{{ factor_dbs.split('\n') }}"

Ниже приведен сценарий оболочки

#!/bin/bash
source $HOME/bin/gsd_xenv $1 &> /dev/null

sqlplus -s <<EOF
/ as sysdba
set heading off


select d.name||','||i.instance_name||','||i.host_name||';' from v\$database d,v\$instance i;

EOF

Несмотря на повышение привилегий, я заметил, что задача не выполняется, пока я не добавлю переменные среды, как показано ниже

- name: Run the script [List]
  shell: "/tmp/sqlscript/oracle_home.sh {{item}} >> /tmp/sqlscript/orahome.out"
  become: yes
  become_method: sudo
  become_user: oracle
  environment:
     PATH: "/home/oracle/bin:/usr/orasys/12.1.0.2r10/bin:/usr/bin:/bin:/usr/ucb:/sbin:/usr/sbin:/etc:/usr/local/bin:/oradata/epdmat/goldengate/config/sys"
     ORACLE_HOME: "/usr/orasys/12.1.0.2r10"
  register: orh
  with_items: "{{ factor_dbs.split('\n') }}"

Однако эта книга воспроизведения должна быть запущена на разных хостах, которые имеют разные переменные path и oracle_home.

У меня вопрос: почему задача запускается, несмотря на повышение разрешений.Когда я пытаюсь запустить тот же сценарий вручную, войдя на сервер и после выполнения команды «sudo su oracle», он работает нормально.

1 Ответ

0 голосов
/ 14 мая 2018

Это зависит от того, где вы на самом деле устанавливаете переменные окружения. Существует разница в выполнении сценария, когда вы вошли в систему на удаленном компьютере, и выполнении сценария через ssh, как это делает Ansible (см., Например, Дифференцирование интерактивного входа в систему и неинтерактивной оболочки без входа в систему ). В зависимости от типа оболочки и вашей системы загружаются разные профили bash.

...