如何在同一个 supervisord 文件中发出杀死 gunicorn 和 运行 gunicorn 的命令?
How do I give command for killing gunicorn and running gunicorn in the same file of supervisord?
我有一个配置文件:
[program:nxchill]
directory=/home/ubuntu/dev/nxchill
command=gunicorn /home/ubuntu/dev/nxchill/nxchill:app -b localhost:5000
autostart=true
autorestart=true
stderr_logfile=/var/log/nxchill/nxchill.err.log
stdout_logfile=/var/log/nxchill/nxchill.out.log
我的objective是先运行命令:
sudo fuser -k 5000/tcp
停止所有 gunicorn 进程,然后执行以下命令:
gunicorn /home/ubuntu/dev/nxchill/nxchill:app -b localhost:5000
所以,当我在 conf 文件中创建 command
部分时:
command=sudo fuser -k 5000/tcp gunicorn /home/ubuntu/dev/nxchill/nxchill:app -b localhost:5000
运行以下命令:
sudo supervisorctl reread
sudo service supervisor restart
sudo service supervisor restart
nxchill FATAL Exited too quickly (process
log may have details)
日志是:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 583, in spawn_worker
worker.init_process()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 129, in init_process
self.load_wsgi()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 138, in load_wsgi
self.wsgi = self.app.wsgi()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load
return self.load_wsgiapp()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
return util.import_app(self.app_uri)
File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 350, in import_app
__import__(module)
ImportError: Import by filename is not supported.
[2018-06-04 07:59:33 +0000] [1527] [INFO] Worker exiting (pid: 1527)
[2018-06-04 07:59:33 +0000] [1523] [INFO] Shutting down: Master
[2018-06-04 07:59:33 +0000] [1523] [INFO] Reason: Worker failed to boot.
现在,即使只有一个命令存在,也会出现同样的错误。
解决办法是忽略sudo fuser -k 5000/tcp
命令,直接运行gunicorn
命令。
该命令应该启动服务器,以便 flask 应用程序在系统重启等情况下永远不会关闭。
不过,由于没有执行杀死它们的命令,因此将使用越来越多的端口。这可以是 运行 一天或一周一次的 cron 作业。不用担心这个命令会杀死 flask 应用程序,因为它会被 supervisord 恢复。
我有一个配置文件:
[program:nxchill]
directory=/home/ubuntu/dev/nxchill
command=gunicorn /home/ubuntu/dev/nxchill/nxchill:app -b localhost:5000
autostart=true
autorestart=true
stderr_logfile=/var/log/nxchill/nxchill.err.log
stdout_logfile=/var/log/nxchill/nxchill.out.log
我的objective是先运行命令:
sudo fuser -k 5000/tcp
停止所有 gunicorn 进程,然后执行以下命令:
gunicorn /home/ubuntu/dev/nxchill/nxchill:app -b localhost:5000
所以,当我在 conf 文件中创建 command
部分时:
command=sudo fuser -k 5000/tcp gunicorn /home/ubuntu/dev/nxchill/nxchill:app -b localhost:5000
运行以下命令:
sudo supervisorctl reread
sudo service supervisor restart
sudo service supervisor restart
nxchill FATAL Exited too quickly (process log may have details)
日志是:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/gunicorn/arbiter.py", line 583, in spawn_worker
worker.init_process()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 129, in init_process
self.load_wsgi()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/workers/base.py", line 138, in load_wsgi
self.wsgi = self.app.wsgi()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/base.py", line 67, in wsgi
self.callable = self.load()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 52, in load
return self.load_wsgiapp()
File "/usr/local/lib/python2.7/dist-packages/gunicorn/app/wsgiapp.py", line 41, in load_wsgiapp
return util.import_app(self.app_uri)
File "/usr/local/lib/python2.7/dist-packages/gunicorn/util.py", line 350, in import_app
__import__(module)
ImportError: Import by filename is not supported.
[2018-06-04 07:59:33 +0000] [1527] [INFO] Worker exiting (pid: 1527)
[2018-06-04 07:59:33 +0000] [1523] [INFO] Shutting down: Master
[2018-06-04 07:59:33 +0000] [1523] [INFO] Reason: Worker failed to boot.
现在,即使只有一个命令存在,也会出现同样的错误。
解决办法是忽略sudo fuser -k 5000/tcp
命令,直接运行gunicorn
命令。
该命令应该启动服务器,以便 flask 应用程序在系统重启等情况下永远不会关闭。
不过,由于没有执行杀死它们的命令,因此将使用越来越多的端口。这可以是 运行 一天或一周一次的 cron 作业。不用担心这个命令会杀死 flask 应用程序,因为它会被 supervisord 恢复。