Я пытаюсь сохранить значение sqlplus в переменной в Linux.
Скрипт работает нормально при ручном запуске. Но значение в переменной не сохраняется, когда скрипт вызывается из crontab.
Код:
#!/bin/ksh
~/.profile
v=`sqlplus -s <<!
<<DB details>>
select sysdate from dual;
!
`
echo "$v"
решение1
Запуск sqlplus
из записи crontab может быть разочаровывающим. Вы получаете очень разреженную переменную PATH, поскольку оболочка, которая crond
разветвляется, не читает файл "rc".
В вашем файле ".profile" вы устанавливаете ORACLE_HOME? Вы включаете $ORACLE_HOME/bin в PATH и экспортируете ORACLE_HOME и PATH? Проверьте это в первую очередь. Также, я должен отметить, что ваш код показывает ksh
вопросвыполнениенетпоискфайл ~/.profile
. Ваш скрипт должен "использовать" этот файл. У меня также, похоже, есть суеверие по поводу настройки и экспорта TNS_ADMIN, например:
export TNS_ADMIN=$ORACLE_HOME/network/admin
Вы можете включить идентификатор пользователя базы данных и пароль в «документ here», используя опцию , /nolog
чтобы sqlplus
избежать отображения этих данных тем, кто запускает ps
:
sqlplus -s /nolog 2>&1 << END_ZERO_ROW_CHECK
connect $USER_NAME/$PASSWORD@$SID_INSTANCE
whenever oserror exit failure
whenever sqlerror exit failure
...
END_ZERO_ROW_CHECK