nginx日志分割
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中,这样就可以实现按天、按小时等一些时间规则来进行日志分割
欢迎转载,转载请注明文章出处,谢谢!
mv 不会丢失内容,在*nix下,只要文件不关闭,句柄是不会被释放的,即便mv走了内容依然会更新。所以是100%安全的。
好复杂啊 看不懂 晕死
呵呵,这个很简单吧~