恰逢发版日把公司nginx搞崩

341 阅读2分钟

2021.12.7

  • 想起前两个星期跟部门老大聊天,被指派了一个任务,看看能不能避免nginx中的nginx.pid文件丢失导致整个nginx崩掉,今天心血来潮就直接把nginx里面pid的指定路径改为/etc/nginx/log/pid,然后执执行命令nginx -s reload,然后就发现nginx直接起不来了...
  • 然后进一步排查发现nginx并没有完全挂掉...怎么说呢,就是在我修改这个配置之前的nginx服务依然好好的在运行着...
  • 这就尴尬了,查了一下端口占用情况,发现80端口确实被nginx霸占着,那就奇怪了既然nginx还在运行为啥我跑nginx的一系列命令都会报pid找不到呢,可是这个文件现在确实存在于目录下,然后另一位同事找来,说nginx挂了,现在有需求要上线,搞得我一下子紧张起来,我这边问题没解决直接影响线上发版啊!于是求助部门老大,一起排查把修改的pid路径恢复,最后直接killall nginx把所有的nginx干掉,再重启一遍nginx就可以了。总算是有惊无险~ 顺带提一下nginx pid 这玩意会在nginx启动时自动创建,nginx被停止时,nginx.pid被删除了。  而nginx的一系列reload、start、stop命令需要通过nginx.pid获取进程号,会根据nginx配置下的路径去找 ,如果不存在,就报错了。

顺便放几个本人常用的nginx命令

  • nginx -s reload 平滑的重启,配置重载。
  • nginx -s stop 快速停止nginx
  • nginx -s quit 完整有序的停止nginx
  • systemctl status nginx.service 查看nginx运行状态
  • systemctl start nginx 启动nginx
  • systemctl restart nginx 重启nginx
  • service nginx restart 重启nginx(需要进去nginx安装目录)
  • killall nginx 关闭所有nginx进程
  • ps -aux|grep nginx 查看正在运行的nginx进程