我有一个将文件写入的系统/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 循环中的范围。