现有一个应用系统,应用日志记录的内容很多,经常造成存储空间不够,需要手工去删除早期的日志文件来释放空间。应用的日志文件命名如下,固定前后缀加上日期和小时:
为了避免手工删除日志,考虑通过写shell脚本来删除30天以前的日志文件,然后使用crontab命令生成定时任务,在每天早上0点1分调用上面的shell脚本进行日志清理。
基本环境信息如下:
工作目录:/home/weblogic/scripts/cleanlog
日志文件目录:/home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/sk
1. 创建日志清理脚本cleanLog.sh
cd /home/weblogic/scripts/cleanlog
vi cleanLog.sh
输入脚本内容如下:
WORK_HOME=/home/weblogic/scripts/cleanlog
WORK_LOG_FILE=${WORK_HOME}/log/cleanup.log
#WORK_ERROR_FILE=${WORK_HOME}/log/cleanup.error.log
LOG_PATH=/home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/sk/
LOG_FILE_DATE_PART=`date -d "-30 day" +%Y-%m-%d`
LOG_FILE=${LOG_PATH}sk.log.${LOG_FILE_DATE_PART}*.log
function log() {
echo `date +"%Y-%m-%d %H:%M:%S - "`$1' ' >>${WORK_LOG_FILE}
}
log "clean up log start..."
log "rm -f "$LOG_FILE
rm -f $LOG_FILE 1>>$WORK_LOG_FILE 2>>$WORK_LOG_FILE
log "clean up log end."
2. 生成定时任务
首先生成定时任务的配置文件cron.txt,内容如下:
1 0 * * * sh /home/weblogic/scripts/cleanlog/cleanLog.sh
表示每天0点1分执行脚本cleanLog.sh
然后生成定时任务:crontab cron.txt
注意执行前要通过crontab -l查看,确保原来没有定时任务,否则会覆盖定时任务。
补充说明:
1) 可以通过crontab -l来查看定时的情况。
2) 要删除全部定时任务:crontab -r,但是要慎用。
3) 也可以通过crontab -e来打开任务列表,选中指定的任务进行删除。
4) 如果定时任务不执行或者执行出错,可以通过root用户来查看定时任务的执行日志:
tail-200f /var/log/cron
5) 为了方便调试,可以把定时任务设成分钟执行一次:*/1 * * * *
3. 创建日志目录和查看执行日志
脚本有记录日志清理的情况,需要在工作目录下创建一个log目录:
cd /home/weblogic/scripts/cleanlog
mkdir log
然后可以通过以下命令来查看日志清理的情况:
tail -200f cleanup.log
4. 如果是集群,复制相关文件到其他服务器并启动定时任务
复制相关文件可以从当前服务器通过scp命令进行复制:
scp -r scripts/ 用户名@目标服务器地址:~/scripts
注:命令中~表示用户的主目录,也可以使用绝对路径进行。