nginx平滑升级出现make: *** [upgrade] Error 1原因

6 篇文章 0 订阅

nginx半自动平滑升级最后一步make upgrade时不成功,报错make: *** [upgrade] Error 1

调试发现:kill -USR2 cat /usr/local/nginx/logs/nginx.pid发送-USR2信号给Nginx要它创建新的Master进程时没有效果,也就没有生成/usr/local/nginx/logs/nginx.pid.oldbi这个文件

原因1:之前启动nginx主进程实例没有用绝对路径的nginx命令,导致现在给这个进程发送信号没有效果:也就是没有使用 /usr/local/nginx/sbin/nginx 启动,而是通过查找环境变量中那个 nginx 命令启动的, 当平滑升级Nginx 在接收到 USR2 信号时使用 execve() 执行原 Nginx 启动命令行的第一个参数启动新实例时就会报找不到 nginx 可执行文件的错误(execve() 并不会查找 PATH 环境变量)这样子的话没办法进行平滑升级

解决: 所以启动nginx实例的时候要用绝对路径命令,以免以后各种麻烦

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

原因2:容器中nginx挂到前台运行: -g “daemon off;” ,这个前台进程结束就会退出docker,所以这种方式运行Nginx也会造成各种问题,包括make: *** [upgrade] Error 1

解决:挂起别的程序在前台运行,nginx仍然后台运行

Dockerfile文件通过CMD运行

CMD touch ~/play.log.txt &&  /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf && tail -f ~/play.log.txt

或entrypoint运行的sh

#!/bin/bash 
touch ~/play.log.txt
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf && tail -f ~/play.log.txt

参考:
https://jpuyy.com/2016/05/nginx-upgrade-failed.html
https://groups.google.com/forum/#!topic/openresty/HiV3c-JwTZ4

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值