重识Nginx - 05 热部署_不停机更换新版本的nginx

2022-10-04 17:24:35 浏览数 (1)

文章目录

  • 热部署 (不停机更换新版本的nginx 二进制文件)
  • kill 信号说明
    • 杀死进程
    • 强制杀死进程
    • 发送SIGHUP信号,可以使用一下信号
    • 彻底杀死进程
    • 显示信号 kill -l

热部署 (不停机更换新版本的nginx 二进制文件)

  • 查看nginx进程
  • 模拟 上传新版本,老版本的ng备份
  • 发送 USR2 信号给 原来的ng的 pid
  • 再次查看ng进程,会发现多出来几个, 此时老的ng已经不再监听了,流量会切到新的ng上来
  • 向老的ng master 发送信息,优雅的关闭它的 work线程 (需要等待老业务都处理完了)
代码语言:javascript复制
# 查看nginx进程  
[root@VM-0-7-centos artisan_ng]# ps -ef|grep nginx |grep -v grep
root      447751       1  0 12:23 ?        00:00:00 nginx: master process ./nginx -c /root/ng/artisan_ng/conf/nginx.conf
nobody    454927  447751  0 13:14 ?        00:00:00 nginx: worker process
[root@VM-0-7-centos artisan_ng]#

[root@VM-0-7-centos artisan_ng]# pwd
/root/ng/artisan_ng
[root@VM-0-7-centos artisan_ng]# ls
client_body_temp  conf  fastcgi_temp  html  logs  proxy_temp  sbin  scgi_temp  uwsgi_temp
[root@VM-0-7-centos artisan_ng]# cd sbin/
# 模拟 上传新版本,老版本的ng备份 
[root@VM-0-7-centos sbin]# cp nginx nginx_old
[root@VM-0-7-centos sbin]#
# 发送  USR2 信号给 原来的ng的 pid 
[root@VM-0-7-centos sbin]# kill -USR2 447751
[root@VM-0-7-centos sbin]#
# 再次查看ng进程,会发现多出来几个, 此时老的ng已经不再监听了,流量会切到新的ng上来 
[root@VM-0-7-centos sbin]# ps -ef|grep nginx
root      447751       1  0 12:23 ?        00:00:00 nginx: master process ./nginx -c /root/ng/artisan_ng/conf/nginx.conf
nobody    454927  447751  0 13:14 ?        00:00:00 nginx: worker process
root      455372  447751  0 13:17 ?        00:00:00 nginx: master process ./nginx -c /root/ng/artisan_ng/conf/nginx.conf
nobody    455373  455372  0 13:17 ?        00:00:00 nginx: worker process
root      455386  454554  0 13:17 pts/1    00:00:00 grep --color=auto nginx
[root@VM-0-7-centos sbin]#
[root@VM-0-7-centos sbin]#


# 向老的ng master 发送信息,优雅的关闭它的 work线程   (需要等待老业务都处理完了)
[root@VM-0-7-centos sbin]# kill -WINCH 447751
[root@VM-0-7-centos sbin]#
[root@VM-0-7-centos sbin]#

# 老的master进程 还是存在的, 已经没有work进程了 。 老的ngxin存在 便于我们进行版本回退 (可以给老的nginx 发送 reload命令)
[root@VM-0-7-centos sbin]# ps -ef|grep nginx |grep -v grep
root      447751       1  0 12:23 ?        00:00:00 nginx: master process ./nginx -c /root/ng/artisan_ng/conf/nginx.conf
root      455372  447751  0 13:17 ?        00:00:00 nginx: master process ./nginx -c /root/ng/artisan_ng/conf/nginx.conf
nobody    455373  455372  0 13:17 ?        00:00:00 nginx: worker process
[root@VM-0-7-centos sbin]#
[root@VM-0-7-centos sbin]#

kill 信号说明

Linux kill 命令用于删除执行中的程序或工作。

kill 可将指定的信息送至程序。

  • 预设的信息为 SIGTERM(15),可将指定程序终止。
  • 若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。

语法

代码语言:javascript复制
kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]

参数说明:

  • -l <信息编号>  若不加<信息编号>选项,则 -l 参数会列出全部的信息名称。
  • -s <信息名称或编号>  指定要送出的信息。
  • [程序]  [程序]可以是程序的PID或是PGID,也可以是工作编号。
  • 使用 kill -l 命令列出所有可用信号。

最常用的信号是:

  • 1 (HUP):重新加载进程。
  • 9 (KILL):杀死一个进程。
  • 15 (TERM):正常停止一个进程。

杀死进程

代码语言:javascript复制
# kill 12345

强制杀死进程

代码语言:javascript复制
# kill -KILL 123456

发送SIGHUP信号,可以使用一下信号

代码语言:javascript复制
# kill -HUP pid

彻底杀死进程

代码语言:javascript复制
# kill -9 123456

显示信号 kill -l

代码语言:javascript复制
[root@VM-0-7-centos ~]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN 1  36) SIGRTMIN 2  37) SIGRTMIN 3
38) SIGRTMIN 4  39) SIGRTMIN 5  40) SIGRTMIN 6  41) SIGRTMIN 7  42) SIGRTMIN 8
43) SIGRTMIN 9  44) SIGRTMIN 10 45) SIGRTMIN 11 46) SIGRTMIN 12 47) SIGRTMIN 13
48) SIGRTMIN 14 49) SIGRTMIN 15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
[root@VM-0-7-centos ~]#

信号

取值

默认动作

含义(发出信号的原因)

SIGHUP

1

Term

终端的挂断或进程死亡

SIGINT

2

Term

来自键盘的中断信号

SIGQUIT

3

Core

来自键盘的离开信号

SIGILL

4

Core

非法指令

SIGABRT

6

Core

来自abort的异常信号

SIGFPE

8

Core

浮点例外

SIGKILL

9

Term

杀死

SIGSEGV

11

Core

段非法错误(内存引用无效)

SIGPIPE

13

Term

管道损坏:向一个没有读进程的管道写数据

SIGALRM

14

Term

来自alarm的计时器到时信号

SIGTERM

15

Term

终止

SIGUSR1

30,10,16

Term

用户自定义信号1

SIGUSR2

31,12,17

Term

用户自定义信号2

SIGCHLD

20,17,18

Ign

子进程停止或终止

SIGCONT

19,18,25

Cont

如果停止,继续执行

SIGSTOP

17,19,23

Stop

非来自终端的停止信号

SIGTSTP

18,20,24

Stop

来自终端的停止信号

SIGTTIN

21,21,26

Stop

后台进程读终端

SIGTTOU

22,22,27

Stop

后台进程写终端

SIGBUS

10,7,10

Core

总线错误(内存访问错误)

SIGPOLL

Term

Pollable事件发生(Sys V),与SIGIO同义

SIGPROF

27,27,29

Term

统计分布图用计时器到时

SIGSYS

12,-,12

Core

非法系统调用(SVr4)

SIGTRAP

5

Core

跟踪/断点自陷

SIGURG

16,23,21

Ign

socket紧急信号(4.2BSD)

SIGVTALRM

26,26,28

Term

虚拟计时器到时(4.2BSD)

SIGXCPU

24,24,30

Core

超过CPU时限(4.2BSD)

SIGXFSZ

25,25,31

Core

超过文件长度限制(4.2BSD)

SIGIOT

6

Core

IOT自陷,与SIGABRT同义

SIGEMT

7,-,7

Term

SIGSTKFLT

-,16,-

Term

协处理器堆栈错误(不使用)

SIGIO

23,29,22

Term

描述符上可以进行I/O操作

SIGCLD

-,-,18

Ign

与SIGCHLD同义

SIGPWR

29,30,19

Term

电力故障(System V)

SIGINFO

29,-,-

与SIGPWR同义

SIGLOST

-,-,-

Term

文件锁丢失

SIGWINCH

28,28,20

Ign

窗口大小改变(4.3BSD, Sun)

SIGUNUSED

-,31,-

Term

未使用信号(will be SIGSYS)

说明: linux 的 kill 命令是向进程发送信号,kill 不是杀死的意思,-9 表示无条件退出,但由进程自行决定是否退出,这就是为什么 kill -9 终止不了系统进程和守护进程的原因

0 人点赞