我有一些奇怪的服务器,所以为了找到问题,我写了一些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 ########################
答案 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