我的脚本名称为: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屏幕运行我的脚本,我认为屏幕让我的服务器变慢。
答案 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