English |
  • 美国VPS主机推荐
  • |
  • 代购服务
  • |
  • 10美元以下VPS
  • |
  • VPS新手指南/教程
  • |
  • 留言板
  • |
  • 关于
  • | 登录 |

    Nginx日志切割脚本

    2011年03月7日 上午 | 作者:VPS侦探

    目前网上也有一些Nginx日志切割脚本,但是论坛还是有用户反映网上Nginx日志切割脚本有问题,我感觉一般是因为脚本中的参数设置问题,或者是crontab中的设置问题。

    为方便lnmp一键安装包用户,我也写了一个Nginx日志切割脚本,下载地址:http://soft.vpser.net/lnmp/ext/cut_nginx_logs.sh

    如果是lnmp0.5/0.6/0.7/0.8/0.9通用,用户可以仅修改log_files_name后面的要切割的日志文件名就直接使用。

    脚本主要参数:

    #设置nginx日志文件目录路径
    log_files_path="/home/wwwlogs/"
    #日志文件将会存放到/home/wwwlogs/年/月/日志文件名_年月日.log
    log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
    #设置要切割的日志的名字,如果日志目录下面的日志文件名为vpser.net.log,则填写vpser.net,每个日志名用空格分隔
    log_files_name=(access vpser.net licess)
    #设置nginx文件的位置
    nginx_sbin="/usr/local/nginx/sbin/nginx"
    #设置日志保存的时间,天
    save_days=30

    如果是非lnmp一键安装包用户可以通过修改上述参数适应你的nginx环境。

    nginx日志切割脚本下载到/root/下面。再添加自动执行,执行:crontab -e

    输入:00 00 * * * /bin/bash /root/cut_nginx_logs.sh 每天0点整开始切割脚本。

    点击查看更多crontab的教程

    本文仅供Nginx用户及lnmp用户参考,如有问题欢迎到https://bbs.vpser.net反馈。

    原创文章谢绝转载!

    >>转载请注明出处:VPS侦探 本文链接地址:https://www.vpser.net/manage/cut-nginx-log-files.html
    VPS侦探推荐:
    遨游主机VultrLinode搬瓦工LOCVPSKVMLAHOSTKVMHostXen80VPS美国VPS主机,国内推荐腾讯云阿里云
    欢迎加入VPS侦探论坛交流:https://bbs.vpser.net

    发表评论

    *必填

    *必填 (不会被公开)

    评论(24条评论)

    1. VPSer说道:

      @sevensky, 你只需要按要求填好日志文件的名字就行了。
      哪个语句是数组。

    2. sevensky说道:

      每个日志名用空格分隔
      log_files_name=(access vpser.net licess) 这里怎么填啊
      log_files_name=vpser.net 2.vpser.net 3.vpser.net 不行..

      log_files_num=${#log_files_name[@]} 这句怎么理解的:roll:

    3. 板凳南瓜说道:

      vhost.h
      建议修改94 95 96 行为

      al="log_format $al_name '\$remote_addr - \$remote_user [\$time_local] \"\$request\" '
      '\$status \$body_bytes_sent \"\$http_referer\" '
      '\"\$http_user_agent\" \$http_x_forwarded_for';

    4. 板凳南瓜说道:

      # log_format http://www.mydomain.com '$remote_addr - $remote_user [$time_local] $request '
      # '$status $body_bytes_sent $http_referer '
      # '$http_user_agent $http_x_forwarded_for';
      log_format http://www.mydomain.com '$remote_addr - $remote_user [$time_local] "$request" '
      '$status $body_bytes_sent "$http_referer" '
      '"$http_user_agent" "$http_x_forwarded_for"';
      access_log /home/wwwlogs/www.mydomain.com.log http://www.mydomain.com;

      日志格式调整一下.YEAH

    5. 板凳南瓜说道:

      博主,我贴的脚本是我自己改了.
      只是 日志格式 不能被识别.不知道什么原因

    6. VPSer说道:

      @板凳南瓜,
      1、转移日志是昨天日期,请查看代码。
      2、分析日志暂时不会加,如有需求可以自行添加
      3、已有删除指定天数的设置,请查看代码或仔细阅读文章
      4、0.6以后日子已从/home/wwwroot/logs/移至/home/wwwlogs/建议手动修改nginx.conf移动日志位置。

    7. 板凳南瓜说道:

      @板凳南瓜,

      在/home/wwwroot/logs/下创建index.php
      内容是PHP 的,就是列出目录 来访问.

    8. 板凳南瓜说道:

      建议增加一个日志分析工具,每天0点后
      默认日志文件名为域名.log

      1.转移日志为 昨天日期
      2.分析日志处理
      3.清除N天的日志

      但是发现日志格式有点问题,还请博主修正

      #!/bin/bash
      #function:cut nginx log files for lnmp v0.5 and v0.6
      #author: http://lnmp.org update by http://folwin.com

      #set the path to nginx log files
      log_files_path="/home/wwwlogs/"
      log_files_dir=${log_files_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
      #set nginx log files you want to cut
      #log_files_name=(access vpser licess)
      #set thpath to analysis output
      logs_output=/home/wwwroot/logs/

      #set the path to nginx.
      nginx_sbin="/usr/local/nginx/sbin/nginx"
      #Set how long you want to save
      save_days=30

      ############################################
      #Please do not modify the following script #
      ############################################
      mkdir -p $log_files_dir

      #cut nginx log files
      for i in /usr/local/nginx/conf/vhost/*;do
      domain=$(basename ${i});
      mv ${log_files_path}${domain}.log ${log_files_dir}/${domain}_$(date -d "yesterday" +"%Y%m%d").log
      done

      $nginx_sbin -s reload

      #analysis logs
      for i in /usr/local/nginx/conf/vhost/*;do
      domain=$(basename ${i} .conf);
      echo "${domain}";
      mkdir -p ${logs_output}${domain};
      /usr/bin/webalizer -p -o logs_output${domain} -n "${domain}" -t "${domain}" ${log_files_dir}/${domain}_$(date -d "yesterday" +"%Y%m%d").log;
      done

      #delete 30 days ago nginx log files
      find $log_files_path -mtime +$save_days -exec rm -rf {} \;

      在/home/wwwroot/logs/下创建index.php

    9. VPSer说道:

      @赵国昊, nginx和php可以暂时用本站的升级脚本升级,其他的会陆续出升级脚本。

    10. 赵国昊说道:

      请问 我目前是 0.4的LNMP 如何升级到0.6啊?

    11. VPSer说道:

      @xx, 修改/usr/local/nginx/conf/nginx.conf

    12. xx说道:

      问一下,安装lnmp0.6时,绑定的域名的规则如何修改,路径在哪?我想改为wordpress的规则。

    13. Dianso说道:

      :mrgreen: :mrgreen: 用上了

    14. wwwaww说道:

      为什么不用cronolog?

    15. VPSer说道:

      @暗の世界, 因为直接用/bin/bash直接执行,只要有读权限就可以了。

    16. 暗の世界说道:

      chmod +x /root/cut_nginx_logs.sh

      最好加上权限设置,否则绝对有人会问为什么执行不了。