最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】Mac中本地用supervidord部署运行Flask的app但经常退出无法稳定运行

Mac crifan 143浏览 0评论
折腾:
【已解决】Flask本地和线上用gunicorn和supervisor部署时如何传入环境变量
期间,已经试了很多次的:
supervisord -c conf/supervisor/supervisord_local.conf 
但是发现:
有时候可以正常启动,有时候不行。
其中不行的时候,往往是:
supervisord -c conf/supervisor/supervisord_local.conf
终端不输出任何东西。
正常的时候,一般输出是:
➜  xxxRobotDemoServer git:(master) ✗ supervisord -c conf/supervisor/supervisord_local.conf 
Unlinking stale socket /var/run/supervisor.sock
但也不一定:
比如刚刚就发现:
➜  xxxRobotDemoServer git:(master) ✗ supervisorctl status
robotDemo                        EXITED    Aug 22 03:47 PM
实际上还是退出了。
去看log的话,此处是:
logs/gunicorn_error.log
[2018-08-22 15:47:51 +0800] [60354] [ERROR] Connection in use: ('0.0.0.0', 32851)
[2018-08-22 15:47:51 +0800] [60354] [ERROR] Retrying in 1 second.
[2018-08-22 15:47:52 +0800] [60354] [ERROR] Can't connect to ('0.0.0.0', 32851)
logs/supervisord.log
2018-08-22 15:47:45,431 INFO RPC interface 'supervisor' initialized
2018-08-22 15:47:45,431 CRIT Server 'inet_http_server' running without any HTTP authentication checking
2018-08-22 15:47:45,736 INFO RPC interface 'supervisor' initialized
2018-08-22 15:47:45,736 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2018-08-22 15:47:45,738 INFO daemonizing the supervisord process
2018-08-22 15:47:45,740 INFO supervisord started with pid 60345
2018-08-22 15:47:46,746 INFO spawned: 'robotDemo' with pid 60354
2018-08-22 15:47:47,751 INFO success: robotDemo entered RUNNING state, process has stayed up for > than 0 seconds (startsecs)
2018-08-22 15:47:52,275 DEBG 'robotDemo' stdout output:
curPath=/Users/crifan/dev/dev_root/company/xxx/projects/robotDemo/server/xxxRobotDemoServer/conf/gunicorn
confPath=/Users/crifan/dev/dev_root/company/xxx/projects/robotDemo/server/xxxRobotDemoServer/conf/gunicorn/..
Before load .env: DEBUG=False, MONGODB_HOST=localhost, FILE_URL_HOST=127.0.0.1
cur_flask_environ=production
FLASK_ENV=production
cur_dir=/Users/crifan/dev/dev_root/company/xxx/projects/robotDemo/server/xxxRobotDemoServer/conf/app
env_folder=production
dotenv_path=/Users/crifan/dev/dev_root/company/xxx/projects/robotDemo/server/xxxRobotDemoServer/conf/app/production/.env
dotenv_load_ok=True
After  load .env: DEBUG=False, MONGODB_HOST=localhost, FILE_URL_HOST=xxx
settings=<module 'conf.app.settings' from '/Users/crifan/dev/dev_root/company/xxx/projects/robotDemo/server/xxxRobotDemoServer/conf/app/settings.py'>
appRootPath=/Users/crifan/dev/dev_root/company/xxx/projects/robotDemo/server/xxxRobotDemoServer/conf/gunicorn/../..
flaskHost=0.0.0.0, flaskPort=32851

2018-08-22 15:47:52,341 DEBG fd 13 closed, stopped monitoring <POutputDispatcher at 4396817800 for <Subprocess at 4396120544 with name robotDemo in state RUNNING> (stderr)>
2018-08-22 15:47:52,341 DEBG fd 11 closed, stopped monitoring <POutputDispatcher at 4396817440 for <Subprocess at 4396120544 with name robotDemo in state RUNNING> (stdout)>
2018-08-22 15:47:52,342 INFO exited: robotDemo (exit status 1; not expected)
2018-08-22 15:47:52,342 DEBG received SIGCHLD indicating a child quit
此处不正常,则:
没有robotDemo.log
-》正常启动的话,是有的。
需要搞清楚此处到底为何,有时候可以运行,有时候又不行。
后来也去试了试:
[program:robotDemo]
;command=/Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/gunicorn -c gunicorn_config.py app:app
command=/Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/gunicorn -c conf/gunicorn/gunicorn_config.py app:app
environment = FLASK_ENV="production"
...
;autorestart=true
autorestart=false
避免每次挂了,就一直重启->导致Mac都卡了。
注意到:
[ERROR] Connection in use: ('0.0.0.0', 32851)
难道是:
mac本地只能运行单个gunicorn?的单个线程?
flask gunicorn [ERROR] Connection in use 0.0.0.0
flask mac gunicorn [ERROR] Connection in use 0.0.0.0
去看之前自己的贴子:
[已解决]运行gunicorn失败:[ERROR] Connection in use 127.0.0.1 8080 – 在路上
先再去确认进程:
➜  xxxRobotDemoServer git:(master) ✗ ps aux | grep 32581
crifan           60599   0.0  0.0  4276968    892 s007  S+    4:00PM   0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn 32581
没有。
➜  xxxRobotDemoServer git:(master) ✗ netstat -tulpn
netstat: n: unknown or uninstrumented protocol
➜  xxxRobotDemoServer git:(master) ✗ lsof -i:32581
➜  xxxRobotDemoServer git:(master) ✗ 
还是没有。
去搜gunicorn,结果还真的发现很多:
➜  xxxRobotDemoServer git:(master) ✗ ps -ax | grep gunicorn
57904 ??         0:01.55 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/python3.6 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/gunicorn -c conf/gunicorn/gunicorn_config.py app:app
59863 ??         0:13.08 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/python3.6 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/gunicorn -c conf/gunicorn/gunicorn_config.py app:app
59864 ??         0:13.33 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/python3.6 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/gunicorn -c conf/gunicorn/gunicorn_config.py app:app
59865 ??         0:13.26 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/python3.6 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/gunicorn -c conf/gunicorn/gunicorn_config.py app:app
59866 ??         0:13.59 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/python3.6 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/gunicorn -c conf/gunicorn/gunicorn_config.py app:app
59867 ??         0:13.35 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/python3.6 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/gunicorn -c conf/gunicorn/gunicorn_config.py app:app
59868 ??         0:13.35 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/python3.6 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/gunicorn -c conf/gunicorn/gunicorn_config.py app:app
59869 ??         0:13.24 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/python3.6 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/gunicorn -c conf/gunicorn/gunicorn_config.py app:app
59870 ??         0:13.50 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/python3.6 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/gunicorn -c conf/gunicorn/gunicorn_config.py app:app
59871 ??         0:13.47 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/python3.6 /Users/crifan/.local/share/virtualenvs/xxxRobotDemoServer-SCpLPEyZ/bin/gunicorn -c conf/gunicorn/gunicorn_config.py app:app
60690 ttys007    0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn gunicorn
➜  xxxRobotDemoServer git:(master) ✗ 
彻底杀掉:
➜  xxxRobotDemoServer git:(master) ✗ kill -9 57904 59863 59864 59865 59866 
➜  xxxRobotDemoServer git:(master) ✗ kill -9 59867 59868 59869 59870 59871 
kill: kill 59867 failed: no such process
kill: kill 59868 failed: no such process
kill: kill 59869 failed: no such process
kill: kill 59870 failed: no such process
kill: kill 59871 failed: no such process

60759 ttys007    0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn gunicorn
再彻底保证
supervisor和gunicorn都没有进程了:
➜  xxxRobotDemoServer git:(master) ✗ ps -ax | grep gunicorn                
60759 ttys007    0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn gunicorn
➜  xxxRobotDemoServer git:(master) ✗ ps aux | grep gunicorn
crifan           60773   0.0  0.0  4276968    896 s007  S+    4:04PM   0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn gunicorn
➜  xxxRobotDemoServer git:(master) ✗ ps aux | grep supervisor 
crifan           60783   0.0  0.0  4286184    924 s007  S+    4:04PM   0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn supervisor
crifan           60541   0.0  0.0  4309536   1576   ??  Ss    3:57PM   0:00.11 /usr/bin/python /Users/crifan/Library/Python/2.7/bin/supervisord -c conf/supervisor/supervisord_local.conf
➜  xxxRobotDemoServer git:(master) ✗ kill -9 60541
➜  xxxRobotDemoServer git:(master) ✗ ps aux | grep supervisor
crifan           60804   0.0  0.0  4276968    648 s007  R+    4:04PM   0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn supervisor
➜  xxxRobotDemoServer git:(master) ✗ ps aux | grep gunicorn  
crifan           60814   0.0  0.0  4275944    800 s007  R+    4:04PM   0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn gunicorn
➜  xxxRobotDemoServer git:(master) ✗ 
然后再去运行:
终于可以正常启动了:
➜  xxxRobotDemoServer git:(master) ✗ supervisord -c conf/supervisor/supervisord_local.conf 
Unlinking stale socket /var/run/supervisor.sock
➜  xxxRobotDemoServer git:(master) ✗ supervisorctl status
robotDemo                        RUNNING   pid 60839, uptime 0:00:06
【总结】
此处Mac本地用gunicorn和supervisor去部署和运行Flask的app时:
supervisord -c conf/supervisor/supervisord_local.conf
有时候可以正常运行,有时候又不行。
最后发现是:
虽然通过:
ps aux | grep 
32851
去排除了还有在运行的(gunicorn的)端口
以及:
ps aux | grep supervisor
和supervisor了,但是实际上通过:
ps -ax | grep gunicorn
发现还是有正在运行的gunicorn的进程的
所以,此处对于gunicorn的log提示的错误:
[ERROR] Connection in use: (‘0.0.0.0’, 32851)
要找到全部的,当前还在运行的进程:
ps aux | grep 32851
ps 
aux
 | grep gunicorn
以及supervisor:
ps aux | grep 
supervisor
看到进程号后,再去完全干掉这些进程:
kill -9 xxx
然后再去重新启动supervisord:
supervisord -c conf/supervisor/supervisord_local.conf
就可以了正常接着用supervisorctl去管理了:
supervisorctl status
supervisorctl stop all
supervisorctl reload
等等。

转载请注明:在路上 » 【已解决】Mac中本地用supervidord部署运行Flask的app但经常退出无法稳定运行

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
86 queries in 0.119 seconds, using 20.54MB memory