Nginx日志配置经验分享( 二 )


日志文件路径可以包含变量 (0.7.6+) , 但这类设置存在以下限制:
• 启动 Nginx worker 进程的用户必须拥有日志目录的写权限;
• 写缓存将不起作用;
• 每条日志写入都会造成日志文件的打开和关闭 。然而 , 由于频繁读写的文件的文件描述符可能会被存储与缓存中 , 根据 open_log_file_cache 指令的时间参数设置 , 日志可能继续写入到旧文件中;
• 每条日志写入时都会检测站点根目录是否存在 , 如果不存在则日志不会创建 , 因此最好在 access_log 设置的同级别指令段中指定站点根目录 , 例如:
server {root /spool/vhost/data/$host;access_log /spool/vhost/logs/$host;...
也有使用 if 判断语句来定义上面的变量 , 但据说可能引发问题 , 建议使用 map 指令 。
3.2 通过定时脚本分割日志
创建日志分割脚本 splitLog.sh :
# /bin/bash
# 日志保存位置
base_path='/usr/local/nginx/logs/'
# 获取当前年信息和月信息
log_path=$(date -d yesterday +"%Y%m")
# 获取昨天的日信息
day=$(date -d yesterday +"%d")
# 按年月创建文件夹
mkdir -p $base_path/$log_path
# 备份昨天的日志到当月的文件夹
mv $base_path/access.log $base_path/$log_path/access_$day.log
# 输出备份日志文件名
# echo $base_path/$log_path/access_$day.log
# 通过Nginx信号量控制重读日志
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
添加linux定时任务:
crontab -e
# 每天0时1分进行日志分割(建议在02-04点之间,系统负载小)
01 00 * * * /usr/local/nginx/logs/splitLog.sh
重启Linux定时任务:
crond restart
如果提示以下错误 crond: can't lock /var/run/crond.pid, otherpid may be 4141:资源暂时不可用 , 删除 /var/run/crond.pid 重新执行命令即可 。
 
作者:李凌




推荐阅读