定期清空日誌文件,不刪除文件

一.背景

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章