监控数据库连接遇到的一个小问题

最近遇到一个数据库方面的问题,数据库所在的文件系统处于read-only状态以后,DB2实例虽然已经启动,这时连接数据库,会hung在那里,很久没有反应,并且db2diag日志里面有大量的错误信息抛出。

这篇短文并不是讨论这个问题怎么解决,因为解决起来很简单。有时候遇到一个问题以后,会突然反思之前的一些设计,联想到之前工作中的不妥之处。

我想到我多年之前写的一个关于监控DB2状态的的脚本,其中有一个监控是连接数据库,看是否能够获得数据库连接,当时是采用的方式是:

  • rtnValue=`db2 connect to ${dbName}`

然后判断rtnValue是否为0


从最近遇到的这个问题来看,这个方式是存在问题的,如果很久得不到连接,这个脚本的执行就会hung在这里,不能及时的返回监控结果。

那么怎么解决这个问题那?可以借助 timeout

  • timeout 30s db2 "connect to ${dbName}"
    rtnValue=$?

通过timeout的方式,这个命令会在30秒内返回。如果发生了上面的这个问题,rtnValue会是 124,否则就是这个命令 db2 "connect to ${dbName}"的返回值。


关于timeout的详细信息可以看

timeout --help

...

If the command times out, and --preserve-status is not set, then exit with status 124.  Otherwise, exit with the status of COMMAND.



请使用浏览器的分享功能分享到微信等