文章标签 ‘日志备份’

nginx日志分割

2012年7月10日 3 条评论

nginx日志本身不能通过配置来进行分割,如果要进行分割,需要通过写一个简单的脚本来实现这个功能。以前我一直都是用cp命令来做的,例如:

#/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

cp $nginxLog $logBakFile 2>&1 >/dev/null
cat /dev/null > $nginxLog

原理很简单,就是通过cp命令拷贝一份当前的日志,拷贝完后清空当前日志。当然,如果nginx的并发量很大,可能会造成日志丢失情况。

今天无意中看到另外一种分割日志的方法,主要是通过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中,这样就可以实现按天、按小时等一些时间规则来进行日志分割

分类: Linux, nginx 标签: ,

无觅相关文章插件,快速提升流量