shell重定向输出被截断

发布于 2022-09-02 13:00:49 字数 1776 浏览 32 评论 0

最近服务器总出问题,我就写了一段代码,保存每秒的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中断,才能继续执行。

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

入画浅相思 2022-09-09 13:00:49

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

sleep 0.5
((i++))
if [ $i -eq 43200 ]
then
    ./remove_io_log.sh
    ((i=i%43200))
fi
忆梦 2022-09-09 13:00:49

兄弟,你的问题解决没,我在用oracle的oswbb监控数据库时,也发现这个问题,我把-c选项加入后,command列自动截取,只获取19个长度,我看你的“dd if=/dev/zero of=”也是19个长度。网上还没找到方法

我找到方法了,造成截取的原因是nohup,因为nohup没有将当前shell环境变量带过去。在脚本中设置shell环境变量COLUMNS=189或者其他值即可。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文