如何将time命令的输出重定向到日志文件?

时间:2014-11-23 10:22:03

标签: bash shell time

我有一些奇怪的服务器,所以为了找到问题,我写了一些bash脚本,它应该运行一些基本测试并将它们输出到日志文件中。

脚本看起来像这样:

#!/bin/bash
PENDERLIST="/root/pender.list"
PING="/bin/ping"
ETHTOOL="/sbin/ethtool"
FILE="/root/14mfile"
function writelog
{
        echo "$(/bin/date +%F) $(/bin/date +%R): $*"
}
for SRV in $(cat $PENDERLIST); do
writelog "################### Begin $SRV ########################"
echo "### PING ###"
$PING $SRV -c 2
ssh root@$SRV "yum install lshw -y"
echo "### Uname -a ###"
ssh root@$SRV "uname -a"
echo "### Release ###"
ssh root@$SRV "/bin/cat /etc/*release*"
LSHW=$(ssh root@$SRV "lshw -C network |grep eth | awk 'NR==1' ")
NIC=$(echo $LSHW |  awk -F: '{print $2}')
echo "### IFCONFIG ###"
ssh root@$SRV "ifconfig"
echo "### ETHTOOL ###"
ssh root@$SRV "ethtool $NIC"
echo "### FILE TRANSFER ###"
time scp $FILE root@$SRV
writelog "############## End of report for $SRV #################"
done

我是这样运行的:

./check_server.sh > log.txt

除了那里的time命令之外,所有输出都被成功写入日志。 我已经尝试将命令更改为:

(time scp $FILE root@$SRV) 2> log.txt
{ time ls; } 2> out.txt

但是两者都将time的输出打印到屏幕而不是log.txt文件。 如何将时间输出重定向到日志?

编辑#1:

在检查日志时,在输出时间的行上,我看到了:

### FILE TRANSFER ### 
2014-11-23 02:31: ############## End of report for pender4.company.com #################
2014-11-23 02:31: ################### Begin pender5.company.com ########################

1 个答案:

答案 0 :(得分:1)

time命令是shell关键字...当你在终端中运行time命令时它不是/usr/bin/time所以-a-o之类的选项不会使用time命令。但是man time仍会显示/usr/bin/time的手册页。您必须使用/usr/bin/time -o logfile command将时间输出重定向到文件logfile,或者您可以使用以下命令这与shell的关键字time类似:

/usr/bin/time -o time_log -f "%E real,%U user,%S sys" [command] [args]将时间输出重定向到文件time_log