- 论坛徽章:
- 0
|
我需要在shell 脚本中 调用 isql 进行一系列的数据库操作。
目前我不知道在isql中如何遇到错误立即退出整个 shell脚本 ,所以
我想通过下面的方法来实现。
首先当前脚本中 调用 isql 时 的错误输出重定向到 LOG文件中,包含 “SQLERROR"关键字。
我想在当前脚本开始时 向后台 提交一个命令,传入的是当前脚本的进程号,相当于创建一个子进程, 这个子进程的功能就是
检查 LOG的每条新增记录 ,如果包含 SQLERROR关键字 ,那么就通过传入的 进程号 杀死当前进程, 自己退出,如果检查到
约定的终止文本串(如 NORMAL_EXIT),则子进程退出。
当前shell脚本如果能执行到最后,则向LOG文件中输入约定的终止文本串(NORMAL_EXIT) ,子进程结束。
现在的问题就是
1. 这个方案可行不? 有没有更好的解决办法?
2. 本人很菜,不知上面的功能如何实现,达人给出流程中核心的命令提示下就好。
3 当前shell中 isql 每次调用都是向后读一段输入 并执行 遇到 约定的结束符(EOF) 才退出的
在一次调用过程中,如果中间的某条sql语句 产生了异常,导致向 日志中输出 SQLERROR ,那么
按照上面的思路 是子进程 kill掉当前进程,而这时 当前进程仍在 调用isql, isql会立即终止吗?
还是要执行完 整段 sql语句 才结束呢?我的本意是 某条sql产生错误则立即结束,而不在继续执行后续sql.
我能想到的就是
- #!/usr/bin/ksh
- LOG=logfile.log
- touch $LOG
- check_error() //实现log文件错误检查功能
- {
- 调用 tail grep 等命令实现
- 发现SQLERROR ,则调用 kill -9 $1
- 发现NORMAL_EXIT 则正常退出。
- }
- #创建子进程检查错误,传入父进程号
- check_error $$ &
- #isql 调用
- isql ********* <<EOF>> $LOG
- .
- .
- .
- .
- EOF
- #isql处理结束
- echo "NORMAL_EXIT" >> $LOG
- return 0
复制代码
[ 本帖最后由 angus006 于 2009-12-4 15:54 编辑 ] |
|