почтовое уведомление сценария оболочки при успехе или неудаче - PullRequest
0 голосов
/ 22 февраля 2012

Я пишу сценарий оболочки, который в основном передает файлы данных через SFTP на сервер базы данных, а затем вызывает процедуру pl / sql, которая загружает данные из этих файлов (внешних таблиц) во внутренние таблицы базы данных.

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

Итак, мой план состоит в том, чтобы иметь скрипт, который содержит всю обработку, которая должна быть выполнена (SFTP, перемещение / удаление файлов, вызов процедуры pl / sql и т. Д.) И включать set -e вверхняя часть сценария.Я также планирую перенаправить вывод в файл журнала в этом сценарии.

Затем я планирую иметь другой сценарий, который вызывает основной сценарий обработки, а затем отправляет по электронной почте журнал, который создается либо с помощью «Success», либо «"Ошибка" в теме письма.

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

Ответы [ 2 ]

1 голос
/ 22 февраля 2012

Звучит разумно.

Одна вещь, которую вы также можете сделать, это сделать одну команду и меньше скриптов:

someSFTPscipt &> somelogfile.txt; if [ $? -eq 0 ]; then echo "Success"; else echo "Failure"; fi
  1. someSFTPscipt &> somelogfile.txt; перенаправляет вывод скрипта в лог-файл
  2. if [ $? -eq 0 ]; then echo "Success"; else echo "Failure"; fi проверяет, успешно ли это (возвращено 0) или нет (любое другое ненулевое значение).Просто замените echo вашими почтовыми командами.
0 голосов
/ 22 февраля 2012

Спасибо за все отзывы об этом.

Я закончил тем, что пошел с этой оболочкой "обертки", которая вызывает основную оболочку обработки.Cron собирается запускать это ежедневно в моем конкретном случае.

Комментарии, безусловно, приветствуются, если это можно улучшить.

#!/bin/sh
################################################################################
# Author     : Zack Macomber                                                   #
# Date       : 02/22/2012                                                      #
# Description: Calls main_process.sh and emails results of the process.        #
#              Also appends to master log file                                 #
################################################################################

# Flag any errors that occur during processing
set -e

# Set newly created files to "rw" for everyone
umask 111

#############
# VARIABLES #
#############
EMAIL_RECIPIENTS=my_email@some_domain.com
MAIN_DIR=/scripts/

#############
# FUNCTIONS #
#############
send_email() 
{
   uuencode results.log results.log | \
   mailx -s "DATA_LOAD $1 - consult attached log for details" $EMAIL_RECIPIENTS
}

################
# MAIN PROCESS #
################

cd $MAIN_DIR
sh main_process.sh > results.log && send_email SUCCESS || send_email FAILURE
cat results.log >> pub_data_load.log

exit 0
...