/ 中存储网

CentOS系统下的Nginx日志切割脚本

2013-09-28 11:38:01 来源:itjs.cn

# !/bin/bash

# 你的日志文件存放目录

logs_path="/home/logs/"

# 日志文件的名字,多个需要空格隔开

logs_names=(blog demo happy)

mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/

num=${#logs_names[@]}

for((i=0;i

mv ${logs_path}${logs_names[i]}.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/${logs_names[i]}_$(date -d "yesterday" +"%Y%m%d").log

done

#pid的位置,自己查找

kill -USR1 `cat /usr/local/nginx/nginx.pid`

注意:"yesterday" +("%Y"或者"%m"或者"%Y%m%d")这里面+号前一定要有空格,不然会报错。

上面这个脚本中的最后一行必须向 Nginx 的进程发送 USR1 信号以重新打开日志文件,如果不写的话,Nginx 会继续将日志信息写入access_[yyyy-MM-dd].log 的那个文件中,这显然是不正确的。

设置crontab,每天定时切割

首先需要确定你的服务器有没有安装crontab的服务,输入crontab -e命令,有反应就安装了。

如果没有安装,运行yum install vixie-cron 一键安装。

输入crontab -e命令,输入下面的内容:

1、00 00意思为00分00点,也就是凌晨0点,后面“ * * * ”为“ 日 月 年 ”无需定义

2、” /home/logs/cut_nginx_log.sh “为你的shell的路径。

00 00 * * * /bin/bash /home/logs/cut_nginx_log.sh

OK ! 大功告成,每天的0时就会自动完成日志的切割并存在相应的以日期命名的目录中。