工作中遇到将nginx日志按日切割并定时自动删除7天之前的nginx日志需求
1、先解决日志切割问题,代码如下:
#! /bin/bash
LOG_PATH="/usr/local/nginx/logs"
RECORD_TIME=$(date -d "yesterday" +%Y-%m-%d)
PID=/usr/local/nginx/logs/nginx.pid
mv ${LOG_PATH}/access.log ${LOG_PATH}/access.${RECORD_TIME}.log
mv ${LOG_PATH}/error.log ${LOG_PATH}/error.${RECORD_TIME}.log
mv ${LOG_PATH}/info.log ${LOG_PATH}/info.${RECORD_TIME}.log
mv ${LOG_PATH}/notice.log ${LOG_PATH}/notice.${RECORD_TIME}.log
mv ${LOG_PATH}/log_port8082.log ${LOG_PATH}/log_port8082.${RECORD_TIME}.log
kill -USR1 $(cat $PID)
2、将以上切割日志代码做成 .sh 可执行文件 cut_nginx_log.sh
本文中,新建cut_nginx_log.sh文件,将代码复制到文件内
3、编写删除7天前的日志文件脚本,代码如下:(路径根据自己实际路径来)
find /usr/local/nginx/logs/ -mtime +7 -name "*.log" -exec rm -f {} \;
4、将以上删除日志文件做成 .sh 可执行文件 auto_del_7_days_log.sh
本文中,新建 auto_del_7_days_log.sh 文件,将代码复制到文件内
5、以上两个脚本都准备好后,可以单独执行两个脚本进行测试。
6、脚本测试没问题后,开始配置定时任务实现定时清理需求,步骤及代码如下:
1)将脚本文件放入到nginx sbin目录下: /usr/local/nginx/sbin/
2)对文件进行授权
chmod +x /usr/local/nginx/sbin/auto_del_7_days_log.sh
chmod +x /usr/local/nginx/sbin/cut_nginx_log.sh
3)配置定时任务
crontab -e
50 23 * * * /usr/local/nginx/sbin/cut_nginx_log.sh >/dev/null 2>&1
55 23 * * * /usr/local/nginx/sbin/auto_del_7_days_log.sh >/dev/null 2>&1
结束
以下crontab命令详解介绍,来自百度搜索
crontab命令的基本格式为:crontab [-u user] file crontab [-u user] [ -e | -l | -r ]
,其中:
-e
用于编辑当前用户的定时任务。-l
用于列出当前用户的定时任务。-r
用于删除当前用户的所有定时任务。
在编辑crontab文件时,每个条目都定义了一个任务的执行时间和要运行的命令或脚本。时间表达式由5个字段组成,分别表示分钟、小时、日、月、周,字段之间用空格分隔。例如,0 */1 * * * /home/work/start-service.sh
表示每天的每小时的第0分钟执行/home/work/start-service.sh
脚本。