nginx日志分割, CentOS服务器里nginx生成日志自动切割 Linux教程 nginx&apache



主要是通过mv命令来实现,我感觉可能比我以前的实现要好一些,特此记录一下。上述脚本可以修改为:

#/bin/bash
nginxLog="/usr/local/nginx/logs/access.log"
logBakFile="/usr/local/nginx/logs/"$(date "+%F")/"bak_"$(date "+%H-%M-%S")".log"

if [ ! -d ${logBakFile%/*} ]
then
    mkdir -p ${logBakFile%/*}
fi

mv $nginxLog $logBakFile 2>&1 >/dev/null
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

先用mv命令把日志备份,然后使用kill -USR1 让nginx 重新打开日志文件。虽然这样也可能丢失日志,但mv命令执行肯定要cp快,所以相当来说要安全一些。

可以把上述脚本加入到crontab中,这样就可以实现按天、按小时等一些时间规则来进行日志分割.


CentOS服务器里nginx生成日志自动切割:


1、编辑切割日志的 shell 程序,目录自定

[plain]view plaincopy在CODE上查看代码片派生到我的代码片
  1. #vi /data/nginx/cut_nginx_log.sh  

输入代码:

[python]view plaincopy在CODE上查看代码片派生到我的代码片
  1. #!/bin/bash

  2. # This script run at 00:00

  3. function cutAccess()  

  4. {  

  5.    dir=$1

  6.    newdir="${dir}/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")"

  7.    suffix=$(date -d "yesterday" +"%Y%m%d")  

  8.    mkdir -p $newdir  

  9.    mv ${dir}/access.log ${newdir}/access.$suffix.log  

  10. }  

  11. cutAccess "/home/wwwlogs/www.yourdomain.com/"

  12. cutAccess "/home/wwwlogs/www.yourdomain-1.com/"

  13. cutAccess "/home/wwwlogs/www.yourdomain-2.com/"

  14. # 重启 nginx

  15. kill -HUP `cat /usr/local/nginx/logs/nginx.pid`  

2、加入定时任务,每天0点自动切割

[plain]view plaincopy在CODE上查看代码片派生到我的代码片
  1. # crontab -e  

  2. 0 0 * * * /bin/bash /data/nginx/cut_nginx_log.sh  

3、nginx 日志格式

[plain]view plaincopy在CODE上查看代码片派生到我的代码片
  1. log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '  

  2.            '$status $body_bytes_sent "$http_referer" '  

  3.            '"$http_user_agent" $http_x_forwarded_for';  

  4. access_log  /home/wwwlogs/www.yourdomain.com/access.log  access;  


签名:这个人很懒,什么也没有留下!
最新回复 (0)
返回