nginx日志切割脚本

2011年03月02日 Linux服务器 评论 2 条 阅读 9,821 views 次

#!/bin/bash

# The Nginx logs path
logs_path="/data0/logs"
logs_dir=${logs_path}/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
logs_file=$(date -d "yesterday" +"%Y%m%d")
mkdir -p /data0/backuplogs/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")
tar -czf ${logs_path}/${logs_file}.tar.gz ${logs_path}/*.log
rm -rf ${logs_path}/*.log
mv ${logs_path}/${logs_file}.tar.gz /data0/backuplogs/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")

/usr/local/nginx/sbin/nginx -s reload

for oldfiles in `find /data0/backuplogs/$(date -d "30 days ago" +"%Y")/$(date -d "30 days ago" +"%m")/ -type f -mtime +30`
do
rm -f $oldfiles
done

最后放到crond中定时执行

00 00 * * * /usr/local/sbin/cut-logs.sh 2>&1 >/dev/null &

nginx.gif
转自:www.freebsdsystem.org/cut_nginx_logs

2 条留言  访客:1 条  博主:1 条

  1. 这样的方法不够安全,还是利用cronlog工具来分割才好。
    因为nginx不支持cronlog,所以需要用额外的处理,具体方法是
    1.建立日志的命名管道
    2.在nginx启动前把各个命名管道用cronlog工具进行绑定(分割预设),cronlog的输入是前面的命名管道。
    3.启动nginx,让日志写到命名管道中。

给我留言

Copyright © 羽飞博客 保留所有权利.   Ality主题 皖ICP备14013844号-1

用户登录