sqlplus не работает в Crontab

Для этого можно использовать sed.

Первая часть довольно проста: найти закомментированный файл network.host и заменить его на незакомментированный с другим значением можно с помощью:

sed -i -e 's/^#network\.host:.*/network.host: 1.2.3.4/' "${ES_HOME}/config/elasticsearch.yml"

Опция -iвыполняет модификацию места -, поэтому она заменяет ваш текущий elasticsearch.ymlфайл. (Вы можете сохранить его резервную копию, например elasticsearch.yml.bak, используя вместо этого -i.bak.)

Аргументом для -eявляется скрипт sed, в данном случае регулярное выражение с командой поиска/замены.Он соответствует закомментированной строке, начинающейся с #network.host, и заменяет ее незакомментированной строкой, включающей IP-адрес.

Если вы хотите получить IP-адрес или имя хоста из переменной среды, вы можете сделать это, разбив строку '...' на две части и вставив туда внешнюю переменную:

sed -i -e 's/^#network\.host:.*/network.host: '"${ip_address}"'/' "${ES_HOME}/config/elasticsearch.yml"

Но обратите внимание, что это может быть хрупким... Если содержимое ${ip_address}включает символ /, это нарушит команду sed...

Для второй части, вставки строк transport.host, вы можете использовать команду sed i\, чтобы вставить строку перед той, с которой вы совпали. Например, вы можете сопоставить последний комментарий в разделе «Сеть» («... обратитесь к документации сетевого модуля» )и вставить туда. Поскольку вы вставляете несколько строк, вам нужно начать новый блок {, чтобы вы могли запускать несколько команд.

Это должно сработать (обратите внимание, что эта команда занимает несколько строк!):

sed -i -e '
/consult the network module documentation/{
i\
# Set custom transport settings:
i\
#
i\
transport.host: localhost
i\
transport.tcp.port: 9300
i\
#
}' "${ES_HOME}/config/elasticsearch.yml"

Теперь можно собрать все воедино, а также добавить проверку на пропуск вставки, если она уже была сделана ранее. Мы можем сделать это, найдя комментарий, который мы вставили («Установить пользовательские настройки транспорта» ), и используя команду b, чтобы перейти к концу сценария, пропустив в этом случае следующее редактирование.

Окончательный вариант сценария:

# Set your own IP into ${ip_address} however you have to.
ip_address=1.2.3.4
sed -i -e '
s/^#network\.host:.*/network.host: '"${ip_address}"'/
/^# Set custom transport settings/,$b
/consult the network module documentation/{
i\
# Set custom transport settings:
i\
#
i\
transport.host: localhost
i\
transport.tcp.port: 9300
i\
#
}' "${ES_HOME}/config/elasticsearch.yml"
0
20.02.2020, 15:09
2 ответа

Для успешного запуска такого задания в cron необходимо установить некоторые переменные, такие как ORACLE_SID, ORACLE_HOMEи так далее. Примерный способ сделать это — сделать свой скрипт таким образом:

source ~/.bashrc #or.bash_profile
/oracle/GR1/121/bin/sqlplus / as sysdba <<EOF >> $LOGFILE
whenever sqlerror exit sql.sqlcode;
set echo on;
set serveroutput on;
STARTUP;
EXIT
EOF

Команда source получит переменные из вашего имени входа и добавит их в среду, в которой вы выполняете эту задачу.

2
28.04.2021, 23:22

Вы должны установить соответствующие переменные env в файле cron перед запуском cron.

Запустите envили export, найдите релевантные переменные оракула и скопируйте их в файл cron.

Дополнительно прочтите документы ;)

0
28.04.2021, 23:22

Теги

Похожие вопросы