# 恰逢发版日把公司 nginx 搞崩

  • 想起前两个星期跟部门老大聊天,被指派了一个任务,看看能不能避免 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 进程
Last Updated: 6/2/2022, 3:50:31 AM