本文是一篇经验性的文章分享,主要是用来分享在使用 uWSGI 运行后台服务的过程中,更新服务时需要先*掉当前运行的 uWSGI 服务进程,然而却出现 uWSGI 进程无法正常*掉/结束的情况时的解决方案。
uWSGI 的安装可以参考uWSGI官方指南->安装uWSGI ,但是考虑到 uWSGI 安装会依赖 Python 和 C compiler 等组件,因此我极力推荐大家使用 Anaconda 进行安装和管理。此节 uWSGI 的安装简单介绍主要是为了想验证本文后续内容提供一个简要支持。
待 uWSGI 安装完成后,即可使用 uwsgi --ini uwsgin.ini 命令启动 uWSGI 服务进程,服务进程启动后可以通过 cat uwsgi.pid 或者 ps aux | grep uwsgi 查看当前 uWSGI 服务进程信息。
cat uwsgi.pid查看当前 uWSGI 服务进程信息
注意cat uwsgi.pid命令中uwsgi.pid需要根据具体的日志目录来查看,比如程序运行在/home/myuwsgi/目录下,此时该文件会在/home/myuwsgi/目录或者/home/myuwsgi/log/目录下。
使用cat uwsgi.pid查看运行信息时,在打开的文件中会有如下信息:
WSGI app 0 (mountpoint='') ready in 7 seconds on interpreter 0x26db010 pid: 14614 (default app)
uWSGI is running in multiple interpreter mode
spawned uWSGI master process (pid: 14614)
spawned uWSGI worker 1 (pid: 14619, cores: 1)
spawned uWSGI http 1 (pid: 14620)
其中uWSGI master process是主进程信息,uWSGI worker 1是工作线程信息,uWSGI http 1是负责处理http请求的工作线程信息。
此时如果使用kill 14614、kill 14614 14619 14620或者如下命令:
kill pidof uwsgi
会发现无论你执行多少次上述命令,uWSGI 服务进程都会自动重启。
ps ax | grep uwsgi查看当前 uWSGI 服务进程信息
使用ps ax | grep uwsgi查看运行信息时,会显示如下信息:
14614 ? S 0:26 uwsgi --ini xxx.ini
14619 ? Sl 10:56 uwsgi --ini xxx.ini
14620 ? S 0:36 uwsgi --ini xxx.ini
此时如果重复上述 kill 命令进*死 uWSGI 服务进程信息,会发现 uWSGI 服务进程都会自动重启。
究其原因,其实上述 kill 命令执行时,默认会发送SIGTERM,因此会导致 uWSGI 服务进程会重启,而不是结束。
因此,要解决此问题,可以使用以下几种方式进行解决:
killall -s INT uwsgi
pkill -f uwsgi -9
注意:此命令行中的 uwsgi 是uwsgi安装路径,安装路径可以使用 which uwsgi 查找。
扩展阅读:
killall -s INT uwsgi 命令中 INT 可以通过 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
其中 INT 表示 2) SIGINT ,因此该命令也可以改写成如下形式 killall -s 2 uwsgi。
同样 killall -s 9 uwsgi 也满足以上要求。
------完------
,Copyright © 2008-2022 秒下下载站
m.down10s.com .All Rights Reserved