背景
nginx的日志文件没有rotate功能。一段时间过后,日志将越发臃肿,一个accesslog很快就突破2.5G,因此有必要通过脚本实现按天切割日志。
1、将日志文件备份到/usr/local/nginx/logs/historyLog目录下,备份的文件名称是access_yyyyMMdd.log和error_yyyyMMdd.log。
1.创建nginx_logs.sh文件,并授予执行权限。
chmod +x nginx_logs.sh
2.备份脚本
#!/bin/bash
# This script run at 00:00
# The Nginx logs path
logs_path="/usr/local/nginx/logs/historyLog/"
logPath="/usr/local/nginx/logs/"
#创建备份目录 如2020/03
mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
#将日志移动到上面的目录中
mv ${logPath}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log
mv ${logPath}error.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/error_$(date -d "yesterday" +"%Y%m%d").log
#主要用到nginx的-usr1信号,usr1 : reopen the log files 向nginx主进程发送信号以重新打开日志
kill -USR1 `cat ${logs_path}nginx.pid`
3.创建日志备份的目录,切换到/usr/local/nginx/logs下
mkdir historyLog
2、通过crontab命令设置,秒 分 时 日 月 周
1、设置定时任务 "crontab -e"
#将于每天凌晨0点0分将nginx日志重命名为昨天的日期格式,并重新生成今天的新日志
0 0 * * * bash /usr/local/nginx/logs/nginx_logs.sh
2.先手动执行nginx_logs.sh