免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4106 | 回复: 7
打印 上一主题 下一主题

bshell如何类似try catch 可以针对所有代码进行异常判断 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-11 14:31 |只看该作者 |倒序浏览
centos5.4 bshell
有一个shell程序在线每周执行一次。
内容全部跟mysql 有关系 。
大致内容如下

mysqldump...... one table
mysqldump...... two table
mysql .............-e"many many SQL;  delete from a limit 1000; ....................."  (其中delete from a limit 1000;这个语句在存储过程里 要执行几百次)
mysql。。。。。。。。。。。其他SQL语句


现在运行几个月突然发现有时候mysql .............-e"many many SQL;  delete from a limit 1000; ....................."  (其中delete from a limit 1000;这个语句在存储过程里 要执行几百次)
脚本执行到这里会引发 死锁错误   Error 1213 (40001)
先在想到的解决办法是 在这个语句 下面加
if ($? != 0)  .......   来判断

java程序有一个try  catch 可以针对所有代码进行异常判断 。
不知道shell 脚本如何能否针对整个代码进行异常判断 (当前是有错误依然往下执行 ,sql是在太多,现在是发现了sql的语句行 但是不敢说其他sql 不会出问题 。
所以需要有一个类似ry  catch 可以针对所有代码进行异常判断 ,一旦有错误 程序不向下走 , 直接报错误提示或发邮件给开发人员

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2011-08-11 14:37 |只看该作者
写个java用shell调用

论坛徽章:
0
3 [报告]
发表于 2011-08-11 15:37 |只看该作者
不可以的 。
当前仅仅在centos上执行。希望仅仅在shell里解决

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
4 [报告]
发表于 2011-08-11 15:51 |只看该作者
Error 1213 (40001)
这显然不是shell报错的风格,不是SHELL的错你非要用SHELL解决不是相当于便秘修理马桶么?

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:55:28
5 [报告]
发表于 2011-08-11 18:15 |只看该作者
Error 1213 (40001)
这显然不是shell报错的风格,不是SHELL的错你非要用SHELL解决不是相当于便秘修理马桶么 ...
waker 发表于 2011-08-11 15:51



    很生动哈~

    楼主你的脚本遇到这种错误是不是会变成一个死进程在哪?我们以前遇到这种情况的解决方案是另起一个守护进程来监控这个,如果发现死进程,就kill掉了重启脚本。

论坛徽章:
0
6 [报告]
发表于 2011-08-12 09:39 |只看该作者
回复 2# waker


    Error 那个错误是mysql的错误

论坛徽章:
0
7 [报告]
发表于 2011-08-12 09:41 |只看该作者
回复 1# liyihongcug


    如果这个错误会输出的话直接抓输出判断就行了

论坛徽章:
0
8 [报告]
发表于 2011-08-29 15:12 |只看该作者
不可以忽略的错误的
如果可以忽略Deadlock ,
可以存储过程中加上DECLARE Handler定义错误的处理办法;处理的过程可以定义为继续执行和中断

因为实际测试发现有死锁的时候她会继续向下执行其他sql语句我的存储过程是 这样的

主存储过程
for 循环几千次
调用辅助存储过程 ---------------------------该存储过程一次删除1万

实际是独立的辅助存储过程发生死锁
我是在 shell 代码里调用这个存储过程的 。  他发生死锁但是实际上他还会继续向下执行其他 脚本。

现在思考改如何让这个shell 一旦有死锁马上退出。不在执行下面的 其他 脚本内容。 如果shell脚本或者存储过程能够实在有错误就退出不再执行下面内容就好了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP