永发信息网

Linux logrotate 问题:如何使Log文件一达到指定大小就转储

答案:4  悬赏:40  手机版
解决时间 2021-03-27 03:42
  • 提问者网友:刺鸟
  • 2021-03-26 17:34
Linux logrotate 问题:如何使Log文件一达到指定大小就转储
最佳答案
  • 五星知识达人网友:酒者煙囻
  • 2021-03-26 17:40
这个问题用crond做不了,因为他的检测间隔就是一分钟,你如果想在两次cron执行的间隔中,log文件的大小达到或超过指定大小就自动转的话,就需要自己写一个脚本,使用sleep这个程序,让她在指定的时间内执行,你可以指定为1秒执行一次logrotate或者其他时间间隔追问你好,脚本方面能不能说得再详细些呢?感谢!!追答比如可以这样:
vi /root/auto_logrotate.sh
#!/bin/bash
while [ $a -z ];
do
sleep 1;
logrotate /xxx/xxx.conf; //这里的/xxx/xxx.conf是你要监控的那个进程的logrotate配置文件。
done
然后chmod u+x /root/auto_logrotate.sh
然后放在后台运行:/root/auto_logrotate.sh&
然后在:echo "/root/auto_logrotate.sh&" >>/etc/rc.local
这样子就会每隔一秒执行一次logrotate,如果log文件符合你的logrotate的配置文件条件的话,就会自动备份。追问频繁的执行貌似Logrotate不太好,因为Logrotate时需要重启rsyslog服务,这期间就会有Log无法输出。最好能监控文件大小,文件到达指定大小后再执行Logrotate。追答#!/bin/bash
while [ $a -z ];
do
sleep 1;
size=`ll /var/log/messages | cut -d " " -f 5`
if [ $size -ge xxxxx ];
then
logrotate /xxx/xxx.conf;
fi
done
全部回答
  • 1楼网友:duile
  • 2021-03-26 19:49
logrotate本身就可以指定大小的,你再仔细看看。
  • 2楼网友:猎心人
  • 2021-03-26 18:50
写程序做。
或是将执行时间缩短到最小,如1分钟。每次执行的时候,检查大小,达到要求转储,没达到,不做。
  • 3楼网友:猎心人
  • 2021-03-26 18:18
用size参数应该就可以了
$ cat logrotate.conf
/tmp/output.log {
size 1k
copytruncate
rotate 4
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯