我正在编写一个shell脚本,它基本上通过SFTP将数据文件传输到数据库服务器,然后调用pl / sql过程,将来自这些文件(外部表)的数据加载到内部数据库表中。
我一直在研究shell脚本中的有效异常处理,看起来set -e
选项可用于在脚本运行的任何命令返回非零时终止带有错误的脚本退出码。
所以,我的计划是有一个脚本,其中包含需要完成的所有处理(SFTP,移动/删除文件,调用pl / sql程序等等)并包含set -e
在脚本的顶部。我还计划在此脚本中将输出重定向到日志文件。
然后,我打算使用另一个调用主处理脚本的脚本,然后通过电子邮件主题发送通过“成功”或“失败”指示生成的日志。
您是否有任何“陷阱”可以预见到这种方法还是看起来合理?
答案 0 :(得分:1)
听起来很合理。
您还可以做一件事,使其成为一个命令,减少脚本:
someSFTPscipt &> somelogfile.txt; if [ $? -eq 0 ]; then echo "Success"; else echo "Failure"; fi
someSFTPscipt &> somelogfile.txt;
将脚本的输出重定向到日志文件if [ $? -eq 0 ]; then echo "Success"; else echo "Failure"; fi
检查它是成功(返回0)还是失败(任何其他非零值)。只需用邮件命令替换echo。答案 1 :(得分:0)
感谢您对此的所有反馈。
我最终选择了这个调用主处理shell的“wrapper”shell。一个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