设为首页 收藏本站
查看: 685|回复: 0

[经验分享] Nginx重启时丢失nginx.pid文件

[复制链接]

尚未签到

发表于 2018-11-10 06:56:57 | 显示全部楼层 |阅读模式
  nginx被停止(nginx -s stop)或者直接杀掉了进程(kill -9 nginx的进程号)后,调用命令(nginx -s>  这句话中,有好几个知识点,也包含了一些错误,错误得把reload或者reopen当做了启动的命令。来依次总结一下:
  1、nginx的常用命令
  停止:
直接杀nginx进程  
ps aux|grep nginx 查看nginx的主进程号,调用kill -9 nginx的进程号来强制停止nginx(还有
  
“kill -quit nginx的进程号”来从容停止nginx,“kill -term nginx的进程号”来快速的停止nginx)
  

  
调用 nginx -s stop 快速停止nginx
  
调用 nginx -s quit 完整有序的停止nginx
  启动:
进入nginx安装目录/sbin/下执行  
nginx或者nginx -c 特定位置的nginx.conf(一般默认是nginx -c ./logs/nginx.conf)
  重启:
nginx -s reload 平滑的重启,配置重载。  nginx工作中,包括一个master进程,多个worker进程。worker进程负责具体的http等相关工作,master进程主要是进行控制等控制。

  nginx -s >1. Nginx的master进程检查配置文件的正确性,若是错误则返回错误信息,nginx继续采用原  
配置文件进行工作(因为worker未受到影响)
  

  
2. Nginx启动新的worker进程,采用新的配置文件
  

  
3. Nginx将新的请求分配新的worker进程
  

  
4. Nginx等待以前的worker进程的全部请求已经都返回后,关闭相关worker进程
  

  
5. 重复上面过程,知道全部旧的worker进程都被关闭掉。
  所以,重启之后,master的进程号不变,worker的进程号会改变。
  日志分割:   
  nginx -s reopen  重新打开日志文件。
  为什么要切割日志?一般Nginx安装好后有些人会打开日志记录,有些人会关闭日志记录,打开日志记录的人一般都会把架设在Nginx上的所有网站日志都存在同一个文件里(比如我存在access.log日志文件里),这样日积月累所有网站的访问记录就会把日志文件越积越大,当需要查看日志文件的时候一看就是一大串,不方便查找。现在,如果我把每天的日志文件分割开来用相应的日期标识出来这样就大大方便查找了。
  我是建议打开日志记录,日志记录里面存放着很多有用的东西。比如:浏览器名称,可以方便你对网站的排版做出调整;IP地址,如果网站收到×××,你就可以查到那个IP地址。
  Linux下我们可以简单的把日志文件mv走,但是你会发现mv走后新的日志文件没有重新生成,一般linux下用的文件句柄,文件被打开情况下你mv走文件,但是原来操作这个文件的进程还是有这个文件的inode等信息,
  原进程还是读写原来的文件,因此简单的mv是无法生效的。
  因此建议过程如下:
1. mv原文件到新文件目录中,这个时候nginx还写这个文件(写入新位置文件中了)  

  
2. 调用nginx -s reopen用来打开日志文件,这样nginx会把新日志信息写入这个新的文件中
  

  
这样完成了日志的切割工作, 同时切割过程中没有日志的丢失。
  

  
测试当前配置文件是否正确: nginx -t
  
测试指定配置文件是否正确: nginx -t 指定配置文件路径
  注意:修改了配置文件后最好先检查一下修改过的配置文件是否正确,以免重启后Nginx出现错误影响服务器稳定运行。判断Nginx配置是否正确命令代码如下:
  nginx -t -c /opt/nginx/conf/nginx.conf
  或者
  /opt/nginx/sbin/nginx -t
  2、/opt/nginx/logs/nginx.pid文件
  首先/opt/nginx/是我的nginx安装路径的,若在nginx.conf配置了pid文件存放路径,则该文件存放的就是Nginx主进程号,如果没指定则放在nginx的logs目录下。有了pid文件,就不用先查询Nginx的主进程号,而直接向Nginx发送信号了,命令代码如下:
  kill -信号类型 ‘/opt/nginx/logs/nginx.pid’
  kill -USR1 等于 nginx -s reopen     这个信号量本来就是用于重新读取日志文件的

  kill -USR2 等于 nginx -s>  reload 和 reopen 的行为相差很大,reopen 仅仅检查日志文件,reload 会重载配置,并启动新 worker,关闭旧 worker
  nginx.pid存放的是nginx的master进程的进程号。
  3.为什么会报错

  nginx被停止时,/opt/nginx/logs/nginx.pid被删除了。  而 reopen和>  4.总结

  reopen是在nginx启动的情况给做分割日志用的, >  真正的启动命令是:  nginx 或者 nginx -c 指定目录的配置文件/nginx.conf,查看进程存在即表明启动成功,之后再调用reload和reopen就不会报错了。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-632993-1-1.html 上篇帖子: 用SED+AWK来分析NGINX日志! 下篇帖子: AWstats 分析Nginx访问日志
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表