前几天修改了一下nginx的域名配置文件,使用reload重载nginx时,突然提示“Job for nginx.service failed because the control process exited with error code.”这个错误,如图:
根据以往的调试经验,首先输入“systemctl status nginx.service”查看错误信息,具体会提示哪里出了问题,就算没有细致到哪个文件的哪一行,那也应该有个ERROR提示,但当我输入了这句话后,一个ERROR提示都没有,提示了下面信息:看到这样的信息,有点摸不清头脑,百度查来查去,没有雷同的,大概说的都是:某个配置文件少了分号、服务器中有apache导致冲突了、端口被占用了、网络问题等等。于是我仔细检查了所有配置,均为发现问题,apache从未和80端口也没被占用,这下感到无奈了。
不过我百度查询是发现有个人简单的记录了他的问题,他的nginx也报了同样的错误,第二天重启了一遍恢复正常,于是我开始对比现在和半年前备份的nginx.conf文件,只有fastcgi_buffers这一项有细微改动,其余没变,原来是fastcgi_buffers 4 128k,被修改成了fastcgi_buffers 8 128k,百度了一下fastcgi_buffers,其用途是:指定本地需要用多少和多大的缓冲区来缓冲FastCGI的应答,半懂半不动,我又仔细看了上图中提示的信息,下面每句话都有kill,由此我大概有了点想法。
使用nginx -t检查配置是否正确,均提示ok和success,这更坚定了我的想法。
我的想法是:可能nginx运行过久,某些个缓存太多太大,导致nginx运行吃力,接近卡死状态,从而无法在正常的能力范围能去重载自己的配置文件,所以它一直提示要kill掉自己,而且检查配置文件没有报错,所以唯一的解决办法只能是restart nginx。
这台服务器上运行这公司80%的项目,而且公司一大部分资源是来自线上推广的,一旦nginx被停止后无法启动,所有网站将全部不能访问,那对我来说就是毁天灭地了,饭不吃觉不睡也得尽快把问题解决了,所有对于重启nginx服务这件事,我是心存余悸的。
不过也是实在没办法了,既然找不到原因,也有了自己基本的定论,重启那是势在必行了,晚上11点在访问量少的时候,我执行了“service nginx restart”,虽然敲下回车前我已经做好了彻夜奋战的准备,但真正按得时候还是感到很紧张,尤其是回车按完后久久不能看到提示信息,真替自己捏了一把冷汗,辛亏结果是重启成功了,真正用行动拼了一把自己的想法。
以上就是这次错误的解决过程,从排错到解决,用了一天的时间,这一天时间查阅了不少资料,用排除法逐步确定了解决办法,从而解决了问题。事后感到很开心的,不过还是希望这种奇怪的问题,少发生一些为好。