恰逢发版日把公司 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 进程