模拟 Logrotate 的 Shell 脚本

模拟 Logrotate 的 Shell 脚本

我有一个将文件写入的系统/var/tmp/log/my.log,我想编写一个shell脚本来在日志文件达到1KB限制时轮换日志文件,这样我的my.log就变成了my.log.1,my.log.1变成了my.log。 2 依此类推,直到my.log.10,然后删除其他文件。

我得到了部分脚本,但不知道如何更改文件名。

#!/bin/bash file_size=`du -b /var/tmp/log/my.log` if($file_size -gt 1024) do mv my.log my.log.1 done fi

当 my.log 达到 1KB 限制时,我需要将 my.log 移动到 my.log.1,然后将 my.log.1 移动到 my.log.2,以便 my.log 可以在之后移动到 my.log.1第二次达到1KB,依此类推。有没有办法在不使用 logrotate 的情况下做到这一点?

答案1

你可以用这样的东西进行旋转:

for i in {9..1}; do
    if [[ -f my.log.${i} ]]; then
        mv -f my.log.${i} my.log.$((i+1))
    fi
done
mv -f my.log my.log.1
touch my.log

这将保留 10 个轮换日志,最多为 my.log.10,一旦脚本轮换次数超过 10 次,每次轮换时都会用较新的日志覆盖该日志。

根据您想要保留的日志数量,您需要降低或增加 for 循环中的范围。

相关内容