30.12.2016 10:03
OlegON
 
настраиваю некоторым клиентам коцаную версию стендбая, а у некоторых еще и с настройкой MTA на хосте проблемы, поэтому почту прикрутил телнетом... В общем, суть скрипта - уведомление, если на хосте максимальный архивлог не совпадает с текущей датой. Запускаю в 8:55, к началу рабочего дня уже обязательно и архивлог сегодняшний есть.

Обратите внимание, что во второй строке импортируются переменные окружения. У вас они могут быть в .bashrc, файл должен быть исполняемым.
Код:
#!/bin/bash
. ~/.profile
export ORACLE_SID=ekk
ld=`sqlplus -s -l / as sysdba <<EOF
set heading off
select to_char(max(completion_time),'DD.MM.YYYY') from v\\$archived_log;
exit;
EOF`
ld=`echo $ld|tail -n1`
cd=`date +%d.%m.%Y`
if [ "$ld" != "$cd" ]
then
(
sleep 1
echo "ehlo x"
sleep 1
echo "mail from:oracle@olegon.ru"
sleep 1
echo "rcpt to:kulabuhov_oa@olegon.ru"
sleep 1
echo "data"
sleep 1
echo "subject:Standby is obsolete..."
sleep 1
echo "from:oracle@olegon.ru"
sleep 1
echo "to:kulabuhov_oa@olegon.ru"
sleep 1
echo
sleep 1
echo "Bad news..."
sleep 1
echo "Bye."
sleep 1
echo "."
sleep 1
echo "QUIT"
) | telnet 10.6.76.40 25;
fi
09.01.2017 09:32
OlegON
 
В гребаной солярке, как обычно, через жопу, поэтому
Код:
ld=`echo $ld|tail -n1`
надо заменить на
Код:
ld=`echo $ld|tail -1`
10.01.2017 09:42
OlegON
 
Сделал скрипт немного более чувствительным.
Код:
#!/bin/bash
. ~/.bashrc
export ORACLE_SID=БАЗА
ld=`sqlplus -s -l / as sysdba<<EOF
set heading off
select round(sysdate-max(completion_time)) from v\\$archived_log;
exit;
EOF`
ld=`echo $ld|tail -n1`
if [ "$ld" != "0" ]
then
.....
вместо round можно использовать trunc, если отставания в день допустимы. Я этот вариант скрипта запускаю с 9 до 18, поскольку в другое время я не работаю, а стендбай может и отставать из-за бекапов.
Часовой пояс GMT +3, время: 12:01.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.