• Nginx 笔记与总结(5)访问日志管理:计划任务 + 日志切割


    要在第二天的凌晨把前一天的访问日志切割备份,并以时间作为文件名,例如:access.20150728.log,这就需要在 Linux 中格式化时间,例如:

    [root@localhost ~]#  date
    2015年 07月 28日 星期二 02:33:02 CST
     
    [root@localhost ~]# date -d yesterday
    2015年 07月 27日 星期一 02:33:18 CST
    
    [root@localhost ~]# date -d yesterday +%Y
    2015
    
    [root@localhost ~]# date -d yesterday +%y
    15
    
    [root@localhost ~]# date -d yesterday +%Y%m%d
    20150727
    

    编写 shell 脚本

    在根目录下创建 data 目录,用于存放 shell 脚本

    mkdir /data
    

    进入 /data 目录,创建 runlog.sh:

    cd /data
    vim runlog.sh
    

    【测试】 .sh 文件:

    echo `date -d yesterday +%Y%m%d`
    

    或者

    [root@localhost data]# vim runlog.sh
    echo $(date -d yesterday +%Y%m%d)
    

      

    保存退出

      

    然后运行该脚本:

    [root@localhost data]# sh runlog.sh 
    20150727
    

    测试结束。

     

    【测试2】

    输出备份后的文件路径

    vim runlog.sh
    

    runlog.sh:

    [root@localhost data]# vim runlog.sh
    
    bak=$BASELOG/$(date -d yesterday +%Y%m%d)
    LOGPATH=/usr/local/nginx/logs/dee.com.access.log
    BASELOG=/data
    
    bak=$BASELOG/$(date -d yesterday +%Y%m%d%H%M).dee.com.access.log
    echo $bak

    保存退出。

     

    运行 runlog.sh :

    [root@localhost data]# sh runlog.sh 
    /data/201507270317.dee.com.access.log
    

    测试结束。

     

    定义了备份后的文件路径之后,需要把原来的日志文件剪切到新的路径,同时新建一个访问日志文件,最后使用 nginx 信号控制中的 USR1 来完成日志切割:

    vim runlog.sh
    

    runlog.sh:

    LOGPATH=/usr/local/nginx/logs/dee.com.access.log
    BASELOG=/data
    
    bak=$BASELOG/$(date -d yesterday +%Y%m%d%H%M).dee.com.access.log
    
    mv $LOGPATH $bak
    touch $LOGPATH
    
    kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
    

      

    保存退出。

    创建计划任务(每分钟执行 1 次):

    crontab -e

    */1 * * * * sh /data/runlog.sh
    

    保存退出。

    此时 /data 目录下的文件:

      

      

    1 min 之后:

      

    2 min 之后:

      

    浏览文件:

      

    如果要把日志按照年月放进不同的路径下,可以:

    vim runlog.sh
    

    runlog.sh:

    LOGPATH=/usr/local/nginx/logs/dee.com.access.log
    BASEPATH=/data/$(date -d yesterday +%Y%m)
    
    mkdir -p $BASEPATH
    
    bak=$BASEPATH/$(date -d yesterday +%d%H%M).dee.com.access.log
    
    mv $LOGPATH $bak
    touch $LOGPATH
    
    kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
    

      

    保存退出。

    此时,有了 201507 的目录:

      

    目录下保存了最新的 log 文件,格式为:*日*时*分

      

      

  • 相关阅读:
    ASP.NET2.0的Offline功能
    Asp.net Mvc中MVCContrib中无法使用Castle的解决方案
    发布一个Windows Live Spaces 博客发布机器人: iWriter (含源码,已参赛,大家帮忙投一下票)
    如何使用Expression Encoder 发布 Silverlight Streaming 视频到博客上?
    Unity 配置:typeConverter的使用
    iWriter 的优点与局限
    如何在VS中快速选择一列或多列代码
    优化VS 2005编译,脱离漫长的等待!
    Centos5.5安装ntfs3g挂载windows盘
    益智贪吃蛇 GreedySnakePuzzled【windows C++游戏源码】
  • 原文地址:https://www.cnblogs.com/dee0912/p/4677697.html
Copyright © 2020-2023  润新知