如何在shell脚本中实现logrotate


12

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:


11
#!/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

我删除了“&”,因为它可能会引起问题。


@Veerendra,我们需要在运行无限循环时将逻辑在循环内滚动。.–
好奇的

@Veerendra我们之前的帖子有错误..“ mv”不会创建新文件,但您可以根据需要更改脚本。
好奇

因此,我可以删除日志文件而不是cpmv,然后使用相同的名称删除新的日志文件吗? )
Veerendra Kakumanu 2015年

您应该使用>>追加到日志文件,>将一遍又一遍地覆盖它。
alcik 2015年

如果使用>,则得到tail: test.log: file truncated Hello World!...。如果使用>>,则得到正确的日志消息,但是文件大小正在增加。没有条件检查条件... ;-(
Veerendra Kakumanu 2015年

24

如何使用savelog

它在debian和RH以及我所知的几乎所有其他Linux发行版中都可用。这是一个/ bin / sh shell脚本,因此也应该在其他任何UNIX上运行。

例如在编写任何要test.log运行的文件之前savelog -n -c 7 test.log。这将保留7个最新的test.log非空版本。默认情况下,它将压缩循环的日志(但是可以通过禁用-l)。

如果需要,可以检查的大小,test.log只有savelog在超过一定大小时才能检查它的大小。


是否知道哪个软件包在AWS Linux上包含此软件包(我相信它接近CentOS)?默认安装没有保存日志。我无法使用默认存储库从yum中找到它
jhonkola,2016年

在RHEL 5中找不到savelog。您知道它应该在哪个仓库中吗?
费利佩·阿尔瓦雷斯

没有关于centos或rhel5打包的想法,但是您可以/usr/bin/savelogsources.debian.net/src/debianutils/4.7中
cas

2
savelog在任何RHEL / CentOS 5/6盒中都没有找到,所以我只是临时下载了它,它似乎可以满足我的需求。
戴尔·安德森

缺点之一savelog是它重命名了文件,但是在完成之前需要花费较长时间gzip旧文件。同时,.0日志已经在第二天获得记录。理想情况下,日志轮换与发出重新打开日志信号的过程之间的时间应该最短。因此,我禁用savelog的压缩功能。
rustyx

2

我这个周末写了一个logrotee。如果我已阅读@JdeBP 关于multilog好答案,我可能不会。

我专注于它是轻量级的,并且能够bzip2其输出块,例如:

verbosecommand | logrotee \
  --compress "bzip2 {}" --compress-suffix .bz2 \
  /var/log/verbosecommand.log

不过,还有很多工作要做和测试。


0

由于无法将注释添加到接受的答案BusyBox提示,其中du没有-b标记),因此:

du /var/log/file | tr -s '\t' ' ' | cut -d' ' -f1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.