linux根据时间段对日志文件进行,匹配,备份日志,并删除
写了一个生成日志文件的shell脚本和python脚本,供测试使用
Shell脚本内容
#!/bin/bash mdate=`date +%Y-%m-%d-%H:%M:%S` LogFile=/home/test/han/a.log for((i=1;i<=100;i++)); do echo $mdate disk is good! $i >> $LogFile sleep 2s done 生成的日志文件格式内容为 2020-12-24-17:35:02 disk is good! 1 2020-12-24-17:35:02 disk is good! 2 2020-12-24-17:35:02 disk is good! 3 2020-12-24-17:35:02 disk is good! 4 2020-12-24-17:35:02 disk is good! 5
Python内容
import logging import time def something(): for i in range(1,100): time.sleep(2) logging.basicConfig(level=logging.INFO,filename='new.log',filemode='a', format='%(asctime)s - %(name)s - %(levelname)s - %(message)s') logging.info(u"print %s" %i) something() 生成日志文件格式内容为 2020-12-23 14:57:53,803 - root - INFO - print 1 2020-12-23 14:57:55,805 - root - INFO - print 2 2020-12-23 14:57:57,809 - root - INFO - print 3 2020-12-23 14:57:59,811 - root - INFO - print 4 2020-12-23 14:58:01,814 - root - INFO - print 5 2020-12-23 14:58:03,817 - root - INFO - print 6 2020-12-23 14:58:05,821 - root - INFO - print 7 2020-12-23 14:58:07,824 - root - INFO - print 8
根据时间段对日志文件进行匹配,备份,再删除原文件备份的内容,同时还要保持python程序往日志里面不间断的写入
#!/bin/bash cd $(dirname $0) #匹配当天的日志并删除 #sed -n "/^$(date +%Y-%m-%d)/,/^$(date +%Y-%m-%d)/p" test.log > ./log/b.log && sed -i "/^$(date +%Y-%m-%d)/d" test.log #匹配前一天的日志 #sed -n "/^$(date +%Y-%m-%d -d '-1 days')/,/^$(date +%Y-%m-%d -d'-1 days')/p" test.log > ./log/test_$(date +%Y-%m-%d -d '-1 days').log #匹配前一天的日志第二种方法 awk -v a=`date +%Y-%m-%d -d "-1 days"` '{if($1==a) print $0}' test.log >> ./log/test2_$(date +%Y-%m-%d -d '-1 days').log && \ sed -i "/^$(date +%Y-%m-%d -d '-1 days')/d" test.log #匹配前一天的日志第三种方法,先备份,再全部清空 cp ventilator.log ./log/ventilator_$(date +%Y-%m-%d -d '-1 days').log && echo -n "" > test.log
最后选用的第三种方法,原因是前两种删除原文件前一天的日志之后,python程序不再对原文件写入日志,原因不详,第三种方法是可以的。
不过,我还是觉得每天生成一个新的日志然后对前一天的日志进行挪走备份,这样多好,,,,,,,,,,,,,,,,,,,,,,,,