Linux 使用shell脚本清理postgresql内核日志

postgresql内核日志格式为postgresql-2022-06-07_081953.log
log_filename = 'PostgreSQL-%Y-%m-%d.log'
PostgreSQL-%Y-%m-%d.log中的%Y%m%d格式如下解释

Linux日期格式

date +%Y%m%d
20220609

$ date +%F
2022-06-09

$ date +%y%m%d
220609
$ date -d yesterday +%Y%m%d
20220608
$ date
Thu Jun  9 10:09:23 CST 2022
$
$ date -d -1day +%Y%m%d
20220608
$ date -d yesterday +%F
2022-06-08
$ date -d -1day +%y%m%d
220608
$ date -d -1day +%Y%m%d
20220608
$ echo $(date +%y%m%d)
220609
$

上述时间格式为:

% H 小时(00…23)
% I 小时(01…12)
% k 小时(0…23)
% l 小时(1…12)
% M 分(00…59)
% p 显示出AM或PM
% r 时间(hh:mm:ss AM或PM),12小时
% s 从1970年1月1日00:00:00到目前经历的秒数
% S 秒(00…59)
% T 时间(24小时制)(hh:mm:ss)
% X 显示时间的格式(%H:%M:%S)
% Z 时区 日期域
% a 星期几的简称( Sun…Sat)
% A 星期几的全称( Sunday…Saturday)
% b 月的简称(Jan…Dec)
% B 月的全称(January…December)
% c 日期和时间( Mon Nov 8 14:12:46 CST 1999)
% d 一个月的第几天(01…31)
% D 日期(mm/dd/yy)
% h 和%b选项相同
% j 一年的第几天(001…366)
% m 月(01…12)
% w 一个星期的第几天(0代表星期天)
% W 一年的第几个星期(00…53,星期一为第一天)
% x 显示日期的格式(mm/dd/yy)
% y 年的最后两个数字( 1999则是99)
% Y 年(例如:1970,1996等)

以下清理是以日志名字中带有日期的删除方式

cat clean.sh
path=/data/.../log 设置日志路径变量
del_date=date +'%F %H%M%S' -d "5 days ago" 将5天前的日期付给del_date作为保留天数

//将日志路径下的所有日志打印,将打印结果放在处理管道中,一个一个进入循环处理,当ls出来的日志满足如下结果进入循环
//ls $path/postgresql*.log | awk -F / '{print $5}'| cut -b 12-28将日志ls出来使用awk进行分割,分隔符为/,并输出第五项,然后使用cut-b截取第12-28个字符
for n in ls $path/postgresql*.log | awk -F / '{print $5}'| cut -b 12-28;do
if [[ $n < $del_date || $n = $del_date ]];then //ruguo ls出来的日志截取后的日期小于等于del_date,将日志删除,说明日志时间比较早
echo file $path/postgresql-$n.log will be deleted. //打印某个日志即将被删除

rm -rf $path/$firstname$n$lastname

rm -rf $path/postgresql-$n.log//删除该日志,后面也可以加上删除是否成功的判断,此处不做处理
fi
done

head -n1 postgresql-2022-06-07_081953.log |awk -F - {print,$1,$2,$3} //打印日志第一行,并进行截取,也可以使用这个日期作为判断
//file_date=ls postgresql*.log -1 | cut -b 12-21 | sed 's/-//g' //提取文件中的日期并将日期中的-换为空,即将2022-06-01改为20220601

引用参考:https://blog.csdn.net/jokertiger/article/details/118765641

posted @ 2022-06-09 10:19  南大仙  阅读(179)  评论(0编辑  收藏  举报