nginx process的respawn和just_spawn 标志

respawn标记是挂了要不要重启,
启动worker进程都是设置respawn=1的(不管ngx_start_worker_processes用
NGX_PROCESS_RESPAWN还是NGX_PROCESS_JUST_RESPAWN)

如果worker进程的退出返回值是2,fatal error的话,则不重启了, 
if (WEXITSTATUS(status) == 2 && ngx_processes[i].respawn) {
    ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0,
                 "%s %P exited with fatal code %d "
                 "and can not be respawn",
                 process, pid, WEXITSTATUS(status));
    ngx_processes[i].respawn = 0;
}

关于just_spawn则要从nginx配置重载说起: 
master收到SIGHUP信号时, signal_handler设置 ngx_reconfigure = 1,
然后在master进程循环里,检测到reconfigure = 1时, 
运行init_cycle(cycle), 然后启动新的worker进程: 
ngx_start_worker_processes(cycle, ccf->worker_processes,
                           NGX_PROCESS_JUST_RESPAWN);

然后对worker进程发送shutdown信号, gracefully关闭旧的worker进程:
ngx_signal_worker_processes(cycle, ngx_signal_value(NGX_SHUTDOWN_SIGNAL));

该函数是对所有worker进程进行循环发信号的,所以要用一个标记just_spawn来标记刚生成的进程:
if (ngx_processes[i].just_spawn) {
      ngx_processes[i].just_spawn = 0;
      continue;
}

上面的NGX_PROCESS_JUST_RESPAWN会设置 ngx_processes[s].just_spawn = 1;

转载于:https://my.oschina.net/u/728887/blog/156836

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值