如何从dbaccess捕获日志

时间:2016-08-20 11:46:44

标签: shell unix informix dbaccess

我正在尝试创建一个脚本来检查服务器数据库之间的连接!

为此我需要捕获日志,但日志显示在屏幕上而不是文件中。

文件:

main.scr

#!/bin/ksh
server[0]="database1_tcp"
server[1]="database2_tcp"
server[2]="database3_tcp"
for i in "${server[@]}";
 do
  query.scr $i>>log_test.dat
 done

query.scr

#!/bin/ksh
DBACCESS testdb << EOSQLF
SELECT *
   FROM testdb@$1:some_table
EOSQLF

log_test.dat:

checking the connectivity for server: database1_tcp

field1 field2

     A      A

***********************************************
checking the connectivity for server: database2_tcp

***********************************************
checking the connectivity for server: database3_tcp


field1 field2

     A      A

***********************************************

终端输出

运行main.scr时屏幕上显示的内容:

Database selected.


1 row(s) retrieved.


Database closed.


Database selected.


908: Attempt to connect to database server (database2_tcp) failed.
Error in line 3
Near character position 1

Database closed.


Database selected.


1 row(s) retrieved.


Database closed.

有没有办法将屏幕上显示的消息定向到某个日志文件,或者您能建议更好的方法吗?

1 个答案:

答案 0 :(得分:3)

作为shellter suggested,DB-Access(dbaccess)将其部分输出写入标准错误,将某些输出写入标准输出。 (请注意,虽然dbaccess将错误消息写入标准错误,但它也会在其中写入其他状态信息。)您需要同时捕获它们,因此需要使用2>&1修改脚本以发送文件描述符2(又名标准错误)到文件描述符1(也就是标准输出)的相同位置:

#!/bin/ksh
server[0]="database1_tcp"
server[1]="database2_tcp"
server[2]="database3_tcp"
for i in "${server[@]}"
do
    query.scr $i >>log_test.dat 2>&1
done

(同样的重定向适用于大约1979年的第7版Unix Bourne shell,以及它的继承者,如Bash和Korn shell。这个URL正式用于Bash文档;这部分在Korn中也是如此shell也是。)

您可能会发现我的SQLCMD计划在这方面更胜一筹。它被设计用于脚本,并将正常输出写入标准输出并将错误写入标准错误,并且首先不那么详细(除非您将其调整为详细)。它与微软最近的johnny-come-lately程序​​没有任何关系(除了名称和一般用途) - 但如果你不小心,MS会设法控制搜索。