首页 > shell重定向输出被截断

shell重定向输出被截断

最近服务器总出问题,我就写了一段代码,保存每秒的TOP快照到文件中,可以在出问题的时候,定位问题。代码如下:

#!/bin/bash

mkdir -p ./log

i=0
while true
do
  date "+%y-%m-%d %H:%M:%S" >> ./log/Top.log.`date +%y-%m-%d`
  echo "  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND" >> ./log/Top.log.`date +%y-%m-%d`
  top -b -c -n 1 | sed -n '8,18p' | sed '/top -b -c -n 1/d' >> ./log/Top.log.`date +%y-%m-%d`
  echo >> ./log/Top.log.`date +%y-%m-%d`
  sleep 0.5
  ((i++))
    if [ $i -eq 43200 ]
    then
        ./remove_io_log.sh
        ((i=i%43200))
    fi
done

然后,写了一个启动脚本,方便批量启动或关闭,代码如下:

#!/bin/bash

cd `dirname $0` || exit

start() {
        setsid ./getTopInfo.sh &
}

stop() {
        killall -9 getTopInfo.sh
}

case "$1" in
        start)
                stop
                start
                echo "Done!"
                ;;
        stop)
                stop
                echo "Done!"
                ;;
        *)
                echo "Usage: $0 {start|stop}"
                ;;
esac

但是截出来的日志,会发现一行超过一定数量后,就会被截断.很是好奇,不知道为什么,还望大神们给个思路啊。

结果类似这样。我输入的命令是:

dd if=/dev/zero of=test bs=1M count=5000

但是屏幕上就剩一半了。

还有就是,启动脚本的start()函数,如果用如下方式:

  start() {
        setsid ./getTopInfo.sh > /dev/null &
}

就可以批量ssh执行命令并正确退出,例如:

for ip in `cat ip`; do ssh $ip "cd /home/xxx/dir/ && ./topLoad.sh start"

但是,如果改成:

start() {
        setsid ./getTopInfo.sh  &
}

脚本就会卡在第一台机器执行完,除非使用ctrl + c中断,才能继续执行。

求大神们帮帮忙,看看到底啥情况,好神奇啊。。。


你那个截断是发生在多久?按照你的脚本,6小时之后文件会清除。

sleep 0.5
((i++))
if [ $i -eq 43200 ]
then
    ./remove_io_log.sh
    ((i=i%43200))
fi
【热门文章】
【热门文章】