使用cron定时删除日志

问题:老项目使用的log4j,不能设定最多保存多久的日志,所以准备再线上机器每天定时跑一个脚本。删除当天过期的日志

例:/data/***/logs /data/***/bussinesslog

现状:日志基本都在/data下面,先是集群名的文件加,再往里就是日志文件夹(bussinesslog、logs),再往里就是真正的日志,里面真正的日志文件又有很多,文件名称格式不完全统一,但是都带有日期,分隔符都是 '-'

1.上传附件 delete_log4j.sh ,默认保存十五天的日志,比如今天是12/10日,今天运行就会删除/data/文件夹/文件夹/2020-11-25 的日志

如果运行报错使用cron定时删除日志

执行 vim /data/delete_log4j.sh   

i

:set ff=unix  把windows下的换行符\r\n换成linux的换行\n

esc按键 :wq

2.创建cron定时任务(不需要root权限)

crontab -l   -- 查看定时任务 * * * * * 从前到后每个*对应的取值范围分别是 分钟(0-59) 小时(0-23) 日(1-31) 月(1-12) 星期几(1-7)

crontab -e 编辑定时任务

* 1 * * * /bin/sh /data/delete_log4j.sh >>/data/cron.log   每天凌晨一点执行

使用中遇到的问题是:手动调用sh执行成功。加入定时任务执行不成功,原因是加入定时任务的执行脚本都需要使用绝对路径,在任何地方

排查问题的思路:

1. systemctl status crond.service 查看定时任务服务的运行状态,下图标识在运行(否则的话可以 systemctl start crond.service 启动   其他命令:systemctl stop crond.service systemctl restart crond.service ,这些命令都没有提示信息)

使用cron定时删除日志

2.查看cron执行日志tail -f  200/var/log/cron(需要root权限)可以看到自己的定时任务

使用cron定时删除日志

执行结果会发邮件,邮件服务有问题的话需要修改/etc/postfix/main.cf文件中 inet_interfaces = localhost 为 inet_interfaces = all再次启动postfix服务正常,启动的命令和上面cron启动命令一致,服务名称更换即可

但是都是需要root权限

查看日志可以去/data/cron.log

 

 

#!/bin/bash
#获取文件夹下所有文件
#
folder="/data"
#当前时间
curdate=$(date "+%Y-%m-%d")
#日志保留天数
todeletedate=$(date --date='15 day ago' "+%Y-%m-%d")

echo "===========now time: ${curdate} begin delet log for :${todeletedate}============="
#if [[ $todeletedate == "" ]]
#then
#    echo "curdate: ${curdate} ,todeletedate : ${todeletedate} is empty"
#    return
#fi
echo "===========123"
softfiles=$(ls $folder)
echo "===========${softfiles}"
for sdec in ${softfiles}
do
    echo "===========${sdec}"
    if [[ -d $folder/$sdec ]]
        then
        echo "desc: $folder/${sdec}"
        logdescs=$(ls $folder/$sdec)
        for logdec in ${logdescs}
        do
            echo "cur desc: ${logdec} delete for:---/data/${sdec}/${logdec}/*${todeletedate}*"
            rm -rf /data/${sdec}/${logdec}/*${todeletedate}*
        done
    fi
    if [[ -f $folder/$sdec ]]
        then
        echo "soft: $folder/${sdec}"
    fi
done

上一篇:组合模式


下一篇:如何使用python复制和提取.gz文件