[实践OK]Nginx error指令把error_log指向非nginx自身的logs目录同时删除掉nginx下的logs目录nginx启动后还去找nginx的logs目录下error.log文件的问题分析备案。

jackxiang 2015-2-3 00:21 | |
背景:nginx.conf里指定了nginx的error_log:error_log /data/logs/nginx/nginx_error.log; 该文件不在nginx的logs下面,于是我把这个logs文件夹都给删除了: rm -Rf /usr/local/nginx/logs,发现在启动时会会报一个alert错,nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory)的研究探讨。


一)删除了logs目录:rm -Rf /usr/local/nginx/logs

二)修改error_log的指向位置,Nginx配置如下:
#error_log /data/logs/nginx/nginx_error.log debug;
#error_log /data/logs/nginx/nginx_error.log notice;
#error_log /data/logs/nginx/nginx_error.log crit;
#error_log /data/logs/nginx/nginx_error.log;
#error_log /dev/null crit;
error_log /data/logs/nginx/nginx_error.log error | debug_core | debug_alloc //这个或配置好像有问题在新版本出现Starting nginx... nginx: [emerg] invalid log level "|" in /usr/local/nginx/conf/nginx.conf:14
,  参考自:http://blog.csdn.net/gsnumen/article/details/7824234

三)启动下nginx试下看,出现如下问题:
root@119.10.6.23:/usr/local/nginx/conf# ../sbin/nginx -c ./conf/nginx.conf
nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory)

问题,我都修改指向了,还去读取这个/usr/local/nginx/logs/error.log 干嘛?

一兄弟我查下源码去了,说了一下问题所在,相当感谢:


—————————————————QA—————————————————
说:这个/usr/local/nginx/logs/error.log日志写死了,我昨天查好多个G里面,把我/占了95%。
答:日志是不能少的。可以写个定时删除N天以前日志的功能呀。

问:等nginx启动成功后,会自动替换成你指定的log。这种逻辑真是不符合我的世界观,为何?
答:
1)这个错误是在 ngx_log_init 函数报出来的,也就是NGX_PREFIX/logs/error.log 是nginx启动时用的日志文件,在这个时候连配置都还没去解析,所以和配置里的error_log没有关系。

2)我在启动过程中(在配置读取之前)有错误,我得错误信息该往哪里写呢?我只能用默认的地址。

3)你需要保留 NGX_PREFIX/logs/error.log 这个路径存在,但你配置里可以把 access_log  error_log 指向别处的。
等nginx启动成功后,会自动替换成你指定的log。

4)还可能有一个nginx.pid也在这个logs下面。
可我修改了:pid       /data/nginx/nginx.pid;
ls /data/nginx/nginx.pid
/data/nginx/nginx.pid

最后的解决办法:
(那要么单独出来,别混一块儿啊,用软链接直接纪念品混一块得了,其实是两个文件才对故意搞一块!)
我不太了解这块,我觉得个系统启动错误得学下mysql...的启动错误,别和用户的虚拟机搞一个文件。
对源码不熟悉,不过也非常感谢了,我现在直接做软链接实现了,在启动时写那地儿你说的替换成你指定的log是一个文件。

根本原因是我不想有nginx下的logs文件夹和nginx的设计有冲突,如下:
一启动就先读配置呢
----
在读配置之前,还有很多事情要做呢,比如 参数处理  os_init  各个模块初始化(配置本身也是一个模块)

其实启动的错误文件和error_log文件混淆成一个文件了。程序员的角度这个/usr/local/nginx/logs/error.log是nginx从系统层面启动时的默认,而这个error_log呢,则是从运行起来后的日志级别来讲的,其实这块有点蒙,呵呵。

—————————————解决办法————————————
—操作记录—这下就忽悠nginx在logs下面有这个文件,其实是个软链接,它再按我配置的error_log写时,还是那个文件—
ln -s /data/logs/nginx/nginx_error.log /usr/local/nginx/logs/error.log
ls  -lart /usr/local/nginx/logs
/usr/local/nginx/logs/error.log -> /data/logs/nginx/nginx_error.log
chmod -R 777 /usr/local/nginx/logs/error.log

忽悠nginx启动默认配置文件模块的软链接代码完毕!

Ps:
/data/software/lnmp1.1-full/nginx-1.6.0# vi ./objs/ngx_auto_config.h 查看源码:


也就是说不光是pid和error.log,还有那个access.log: /usr/local/nginx/logs/access.log 好像还有这个问题,操作如下解决:
rm -Rf /usr/local/nginx/logs/access.log
touch /data/logs/nginx/nginx_access.log
chown www /data/logs/nginx/nginx_access.log
ln -s /data/logs/nginx/nginx_access.log /usr/local/nginx/logs/access.log
chown www /usr/local/nginx/logs/access.log

这样干的结果是:
ls -lart /usr/local/nginx/logs
error.log -> /data/logs/nginx/nginx_error.log
access.log -> /data/logs/nginx/nginx_access.log

关于access.log,是这样的一个日志情况,经实践如下:
1)如果有设置会向设置里写。
2)如果没有设置关闭,会默认向:/usr/local/nginx/access.log里写。
3)如果加上:access_log off ,又打开了:access_log /data/logs/nginx/access_justwinit.log access;
    (1)打开的指令失效。  (2)也不向nginx默认的/usr/local/nginx/access.log里写。 也就是全关掉了。


        location ~ .*\.(js|css)?$
        {
                expires      1d;
                limit_conn addr 5;
                limit_conn_status 505;
        }

        access_log off;#关掉下面日志路径后,不加这一行会向:/usr/local/nginx/logs/access.log写
        #access_log /data/logs/nginx/access_justwinit.log wap_access;
        #access_log /data/logs/nginx/access_justwinit.log access;
}  



Finished...

        
            

——————————————————————————————————
为何放在/data下呢,因为/data是另一块大一点的vps磁盘,适合存放日志:
/dev/sda3        14G  6.3G  6.4G  50% /
/dev/sdb         94G   27G   63G  31% /data

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/7783/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2015-2-3 13:08
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]