我正在尝试创建一个脚本来检查服务器数据库之间的连接!
为此我需要捕获日志,但日志显示在屏幕上而不是文件中。
文件:
#!/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
#!/bin/ksh
DBACCESS testdb << EOSQLF
SELECT *
FROM testdb@$1:some_table
EOSQLF
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.
有没有办法将屏幕上显示的消息定向到某个日志文件,或者您能建议更好的方法吗?
答案 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会设法控制搜索。