每10秒清除一次脚本日志

时间:2017-04-19 14:14:19

标签: linux bash shell

我的脚本名称为:run.sh

这是我的脚本代码:

#!/usr/bin/env bash


install() {
        sudo apt-get update
        sudo apt-get upgrade
}

if [ "$1" = "install" ]; then
  install
  else

if [ ! -f ./tg/tgcli ]; then
    echo "tg not found"
    echo "Run $0 install"
    exit 1
 fi

   #sudo service redis-server restart
   #./tg/tgcli -s ./bot/bot.lua -l 1 -E $@
   ./tg/tgcli -s ./bot/bot.lua $@
fi

并且在运行时,这个脚本每秒都会给我这样的输出:

[09:54]  2014 Hello
[09:55]  2014 Hi
[09:57]  2014 How Are you ?
and many like this (thousands in hour !)

我的服务器在5小时内变慢。

我在bot.lua中检查打印命令,但是没有办法删除打印它。

你可以每隔10秒添加一些代码来清除我的脚本日志吗?

非常感谢。

我的脚本输出无法随处保存,只是在终端显示

我想在linux终端上输入清除命令等代码,每10分钟或5分钟清除一次脚本日志。

经过5天的脚本运行后,我可以(有时不能)登录我的服务器,我的服务器变得非常慢,我必须等待3或5分钟才能登录我的服务器,登录我的服务器后我的服务器很惊人再快点!

我忘记说我使用byobu屏幕运行我的脚本,我认为屏幕让我的服务器变慢。

1 个答案:

答案 0 :(得分:0)

我不认为像这样简单的事情会导致服务器速度变慢,但您可以在脚本中添加一个检查,以便在每次运行时计算日志文件的大小或行数。

此函数假定您将输出重定向到日志文件。将变量设置为最有意义的变量。

log_check() {
    line_count=$(wc -l $log_file | awk '{print $1}')
    size_check=$(du -ax $log_file | awk '{print $1}')
    max_file_size="1500"
    max_file_length="1000"

    if [[ $line_count >= $max_file_length || $size_check >= $max_file_size ]]; then
        echo "" > $log_file
    fi
}

我还建议在[]上使用[[]],因为这是一个bash脚本,只要你不打算将它与posix兼容,并且只计划与bash [[]]一起使用它永远比[]好。

编辑:

由于您要将输出记录到终端而不是文件,因此您可以在脚本中使用clear命令。

尝试一下,看看功能如何运作

for i in {1..20}; do
    echo $i
    if (( i == 10 )); then
        clear
    fi
done

我假设你的代码在某个地方有一个循环,如果没有,清除终端会话会有点复杂。我不确定你的代码的哪一部分实际上是在向stdout打印任何东西,我在这里猜测它是

./tg/tgcli -s ./bot/bot.lua $@

您可以尝试这样的操作,它将为您的初始过程提供背景,然后每隔60秒清除一次以清除终端窗口。您是否有任何理由不将输出写入日志文件?仅此一点也可以解决您的一些问题。

#!/bin/bash

./tg/tgcli -s ./bot/bot.lua $@ &
pid="$!"

check_pid() {
    ps -ef |grep "$pid"|grep -v 'grep' &>/dev/null
}

cnt=1
until ! check_pid; do
    if (( cnt == 6 )); then
        clear
        cnt=1
    fi
    sleep 10
    ((cnt++))
done