test.sh
#!/bin/bash
echo "Hello World"
test2.sh
#!/bin/bash
while true
do
sh test.sh >> /script_logs/test.log &
done
我想实现logrotate来控制日志文件的大小,如果情况如上所示,该如何实现logrotate?
test.sh
#!/bin/bash
echo "Hello World"
test2.sh
#!/bin/bash
while true
do
sh test.sh >> /script_logs/test.log &
done
我想实现logrotate来控制日志文件的大小,如果情况如上所示,该如何实现logrotate?
Answers:
#!/bin/bash
touch /script_logs/test.log
MaxFileSize=2048
while true
do
sh test.sh >> /script_logs/test.log
#Get size in bytes**
file_size=`du -b /script_logs/test.log | tr -s '\t' ' ' | cut -d' ' -f1`
if [ $file_size -gt $MaxFileSize ];then
timestamp=`date +%s`
mv /script_logs/test.log /script_logs/test.log.$timestamp
touch /script_logs/test.log
fi
done
我删除了“&”,因为它可能会引起问题。
cp
和mv
,然后使用相同的名称删除新的日志文件吗? )
>>
追加到日志文件,>
将一遍又一遍地覆盖它。
>
,则得到tail: test.log: file truncated Hello World!
...。如果使用>>
,则得到正确的日志消息,但是文件大小正在增加。没有条件检查条件... ;-(
如何使用savelog
?
它在debian和RH以及我所知的几乎所有其他Linux发行版中都可用。这是一个/ bin / sh shell脚本,因此也应该在其他任何UNIX上运行。
例如在编写任何要test.log
运行的文件之前savelog -n -c 7 test.log
。这将保留7个最新的test.log非空版本。默认情况下,它将压缩循环的日志(但是可以通过禁用-l
)。
如果需要,可以检查的大小,test.log
只有savelog
在超过一定大小时才能检查它的大小。
/usr/bin/savelog
在sources.debian.net/src/debianutils/4.7中
savelog
是它重命名了文件,但是在完成之前需要花费较长时间gzip旧文件。同时,.0日志已经在第二天获得记录。理想情况下,日志轮换与发出重新打开日志信号的过程之间的时间应该最短。因此,我禁用savelog
的压缩功能。
我这个周末写了一个logrotee。如果我已阅读@JdeBP 关于multilog
的好答案,我可能不会。
我专注于它是轻量级的,并且能够bzip2其输出块,例如:
verbosecommand | logrotee \
--compress "bzip2 {}" --compress-suffix .bz2 \
/var/log/verbosecommand.log
不过,还有很多工作要做和测试。