如何在shell脚本中实现logrotate

如何在shell脚本中实现logrotate

测试文件

#!/bin/bash
echo "Hello World"

测试2.sh

#!/bin/bash
while true
do
    sh test.sh >> /script_logs/test.log &
done

我想实现logrotate来控制日志文件大小,那么如果像上面的情况,如何实现logrotate呢?

答案1

使用怎么样savelog

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

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

如果需要,您可以检查尺寸,test.log并且仅savelog在超过特定尺寸时才检查。

答案2

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

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

答案3

我写了一个洛格罗蒂这周末。如果我读过@JdeBP 的,我可能不会关于的很好的答案multilog

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

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

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

答案4

由于我还无法添加评论接受的答案, A忙碌盒提示,其中du没有-b标志:

du /var/log/file | tr -s '\t' ' ' | cut -d' ' -f1

相关内容