定期清空日志文件,不删除文件

一.背景

Linux服务器上,程序运行一段时间后,日志可能占满了磁盘,导致磁盘可用空间告警,这时就需要批量清空(非删除)日志文件

二.错误做法


一般可能会写个批量删除的脚本,定时去运行,形如:

#!/bin/bash
# 查看/opt目录下,所有日志文件及大小
find /opt -name *.log | xargs du -sh
# 删除/opt目录下所有的日志文件
find /opt -name *.log | xargs rm -rf

上面的命令可以完成删除的效果,但会引入一些问题,因为日志文件可能此时正在被程序使用,直接删除后,导致程序日志无法写入(删除后无法自动创建),必须重启服务后才能自动创建日志文件并再次写入。

这也正是我们查看日志时提示日志文件不存在,但系统进程存在而且系统可正常使用的原因所在。

三.正确做法

正确的做法是: 
1. 删除非当天的日志文件;(一般程序日志会配置日切,每日一个文件) 
2. 清空当天的日志文件;

#!/bin/bash
# 查看/opt目录下,所有【非当天】的日志文件及大小
find /opt -name *.log.* | xargs du -sh
# 删除/opt目录下所有【非当天】的日志文件
find /opt -name *.log.* | xargs rm -rf
# 查看/opt目录下,所有【当天】日志文件及大小
find /opt -name *.log | xargs du -sh
# 清空/opt目录下所有【当天】的日志文件
for i in `find /opt -name *.log`
do 
  cat /dev/null > $i
done

三、改造后的脚本

#!/bin/bash
#日志目录
APP_LOG_DIR="/opt/xxx/logs";
cleanAppLogFile(){
	for i in `find ${APP_LOG_DIR} -name "*.log"`
	do 
	  cat /dev/null > $i
	done
}
echo
cleanAppLogFile $APP_LOG_DIR

四、linux 定时任务配置

添加定时任务 : crontab -e

基本格式 : 
*  *  *  *  *  command 
分  时  日  月  周  命令 
解 释: 
第1列表示分钟1~59 每分钟用或者 /1表示 
第2列表示小时1~23(0表示0点) 
第3列表示日期1~31 
第4列表示月份1~12 
第5列标识号星期0~6(0表示星期天) 
第6列要运行的命令

例如:

linux 让 crontab 每天03点00 访问一次指定的url

 00 03 * * * /usr/bin/curl http://www.baidu.com/

注意:一定要加上这个 /usr/bin/curl

实际的配置

 00 03 * * * /usr/bin/sh /home/xx/cleanLog.sh

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值