我有以下解决方案来记录在远程计算机上执行的命令及其输出:
rexec:// -t -t /usr/bin/ssh -q -x -o StrictHostKeyChecking=no -2
-l ${SSHUserName} -p 22 ${mainHost}
| tee >(/opt/oss/clilogging/bin/clilogging.sh para1 para2)
clilogging.sh
会将每个命令及其输出记录到日志文件中。
但是,有时最后一个退出的命令及其输出消息"logout"不会写入日志文件。
clilogging.sh
如下:
#!/bin/bash
{
while read R || [ -n "$R" ];do
#e.g. 2013-08-19T09:58:08+0300
timestamp=`date +%FT%T%z`;
echo $timestamp $R;
done
} > /tmp/xxx.log
有人可以帮助我吗?多谢!
感谢汤姆的评论,谢谢大家。
我已经找到了这个问题的解决方案。
需要在 clilogging.sh 开头添加以下代码
trap "" HUP
代码的含义是处理 SIGHUP 信号,这里我忽略这个信号,然后 clilogging.sh
不会立即退出并有机会处理所有缓冲区。
曼 7 信号
Signal Value Action Comment
-------------------------------------------------------------------------
SIGHUP 1 Term Hangup detected on controlling terminal
or death of controlling process