生产环境中的服务器,由于访问日志文件增长速度非常快,日志太大会严重影响服务器效率。同时,未来方便对日志进行分析计算,需要对日志文件进行定时切割。常用按天切割。
日志文件切割原理:
mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/20131221.log
kill -USR1 Nginx主进程号
先通过 mv 命令将日志文件重命名为 /usr/local/nginx/logs/20131221.log, 然后发送 kill -USR1
信号给Nginx
主进程号,杀掉Nginx,让Nginx重新生成一个新的日志文件/usr/local/nginx/logs/access.log。
如果 nginx.conf 配置文件中使用了 "pid /usr/local/nginx/nginx.pid;" 指令, 指定了 pid 文件 的 存放路径, 可以通过 cat 这个 pid 文件获得 Nginx 的 主进程号。
kill -USR1 'cat /usr/local/nginx/nginx.pid'
如果要每天定时切割日志,还有借助crontab 轮询运行一个shell 脚本。
vi /usr/local/nginx/sbin/cut_nginx_log.sh
输入以下内容并保存:
# !/bin/bash
# 每天00:00运行
# Nginx 日志文件存放路径
logs_path="/usr/local/nginx/logs/"
# 创建目录 /usr/local/nginx/logs/年/月/
mkdir -p ${logs_path}$(date -d "yesterday" + "%Y")/$(data -d "yesterday" + "%m")/
# 将access.log 文件移动并重命名为 /usr/local/nginx/logs/年/月/ access_年月.log
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" + "%Y"
)/$(date -d "yesterday" + "%m")/access_$(date -d "yesterday" +
"%Y%m%d").log
# 再发送 kill -USR1 信号给Nginx 主进程,告诉Nginx 重新生成一个 /usr/local/nginx/logs/access.log 文件
kill -USE1 'cat /usr/local/nginx/nginx.pid'