我们的服务器部署在linux系统上,后来发现每天都会产生大量的日志文件,不仅在查阅时很不方便,并且消耗存储空间,而且超过20天的日志也基本没有存在的意义。所以,计划写一个linux定时任务,及时删除过期日志。
这个主要步骤就是写一个shell脚本,然后利用linux的crontab设置定时器来定时执行这个脚本。
首先,我先介绍一下linux的crontab
我们先查看下etc/crontab文件
通过vim /etc/crontab命令进入编辑状态

minute - 从0到59的整数
hour - 从0到23的整数
day - 从1到31的整数 (必须是指定月份的有效日期)
month - 从1到12的整数 (或如Jan或Feb简写的月份)
dayofweek - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)
command - 需要执行的命令(可用as ls /proc >> /tmp/proc或 执行自定义脚本的命令)
之前我的crontab文件中并没有从# run-parts以下的四行定时任务命令,不知道你们的有没有,没有的话可以添加上,这四句命令分别是
第一行 每小时的01分用root用户执行一次etc/cron.hourly文件夹下的sh脚本,
第二行 每天的四点01分用root用户执行一次etc/cron.daily文件夹下的sh脚本
第三行 每星期日的四点22分用root用户执行一次etc/cron.weekly文件夹下的sh脚本
第四行 每年的一月的四点42分用root用户执行一次etc/cron.monthly文件夹下的sh脚本
了解上面的命令之后,我们的目的是每周执行一次sh脚本,所以我们在cron.daily文件夹下面新建一个sh脚本,内容如下
######################################################################
# 日志定时运行时间为每天4点2分
# 删除5天之前的日志文件
# 日志文件时间是根据日志名称后面的日期来计算
# 运行脚本注意日志文件中是否有其他相同后缀的非日志文件和日志文件名称是否符合要求
######################################################################
#日志文件所在目录
path=/home/dameng/software/tomcat-cangwu/logs
#进入日志目录
cd $path
#catalina.out日志文件备份
#获取前一天的日期
bak_date=`date +%Y-%m-%d -d "1 days ago"`
#备份catalina.out日志,后面添加日期
cp catalina.out catalina.out.$bak_date.log
#清空catalina.out日志文件
echo > catalina.out
#5天之前的日志文件删除
#获取5天之前的日期
del_date=`date +%Y-%m-%d -d "5 days ago"`
#获取文件名中的日期字符串,然后对比时间进行相应的操作,localhost_access_log的后 缀文件名一般是txt,这里包括txt文件
for n in `ls *.log *.txt -1`;do
m=`echo $n | awk -F. '{print $(NF-1)}'`
m=`echo ${m:0-10}`
if [ ! $m ]; then
echo "IS NULL"
continue
fi
if [[ $m < $del_date || $m = $del_date ]];then
echo file $n will be deleted.
rm -rf $n
fi
done
最终结果如图 千万记得创建完成之后添加可执行权限 (命令:chmod +x 文件名)

本文介绍如何使用Linux的crontab设置定时任务,定期清理服务器上的过期日志文件,以节省存储空间并提高日志查阅效率。
1万+

被折叠的 条评论
为什么被折叠?



