Flask+Supervisor安裝實現後臺進程常駐
本次主要嘗試雲主機運行Flask+Supervisor後臺運行
之前flask demo的運行,只能在在任務開啓時運行。爲了能夠長期在後臺運行,
必須採用Supervisor在開關機加載並維護進程才能保證本地關機網頁依然能夠打開。
步驟如下:
- 打開建立的flask環境,新建requirements.txt列出全部的flask組件
pip install -r requirements.txt 以下爲內容
Flask==0.10.1
Flask-Login==0.2.11
Flask-Mail==0.9.1
Flask-Moment==0.4.0
Flask-PageDown==0.1.5
Flask-SQLAlchemy==2.0
Flask-Script==2.0.5
Flask-WTF==0.10.2
Flask-Cache==0.13.1
Flask-Restless==0.15.0
Flask-Uploads==0.1.3
Jinja2==2.7.3
Mako==1.0.0
Markdown==2.5.1
MarkupSafe==0.23
SQLAlchemy==0.9.8
WTForms==2.0.1
Werkzeug==0.9.6
html5lib==1.0b3
itsdangerous==0.24
six==1.8.0
awesome-slugify==1.6
-
裝 uwsgi / gunicorn
pip install uwsgi
pip install gunicorn -
退回到Flask項目目錄下建立uwsgi.ini(這是爲了使用uwsgi的,但是gunicorn更簡單貌似)
[uwsgi]
# uwsgi 啓動時所使用的地址與端口
socket = 0.0.0.0:5000
# 外網訪問端口,如果直接用uWSGI外網,這裏由於使用了Nginx,故註釋掉
# http= :80
# 指向網站目錄
chdir = /root/projects/flask_car/
# python 啓動程序文件
wsgi-file = server.py
# python 程序內用以啓動的 application 變量名
# app 是 manage.py 程序文件內的一個變量,這個變量的類型是 Flask的 application 類
callable = app
# 處理器數
processes = 4
# 線程數
threads = 2
#狀態檢測地址
stats = 0.0.0.0:9191
daemonize=/var/log/uwsgi.log
-
運行命令安裝配置
uwsgi config.ini
-
安裝 Supervisor
supervisor就是作爲一種進程守護,來監聽web服務,一旦web掛掉,supervisor會讓其自啓。確保web服務器不會處於掛掉狀態
(1) 退出環境deactivate
(2)安裝擴展倉庫sudo yum install -y epel-release
(3)安裝yum install -y supervisor
(4)檢查安裝的位置rpm -ql supervisor
(5)找到/etc/superisord.conf
(6)修改這個文件vim superisord.conf
mkdir /etc/supervisor
(7)通過運行echo_supervisord_conf程序生成supervisor的初始化配置文件
echo_supervisord_conf > /etc/supervisor/supervisord.conf
(8)打開/etc/supervisor/supervisord.conf最後一行可以看到
就是這個目錄下的ini都會加載,那就在/etc/supervisor.d下面增加一個
;[include]
;files = relative/directory/*.ini
# 增加如下
[include]
files = conf.d/*.conf
(9)增加一個配置文件flask_car.conf到conf.d目錄下
[program:flask_car]
# 啓動命令入口
# command=flask/bin/uwsgi ./uwsgi.ini
command=flask/bin/gunicorn -w 4 -b 0.0.0.0:5000 server:app
# command=flask/bin/python3 ./server.py
# 命令程序所在目錄
directory=/root/projects/flask_car/
#運行命令的用戶名
user=root
autostart=true
autorestart=true
#日誌地址
stdout_logfile=/root/projects/flask_car/logs/uwsgi_supervisor.log
priority=1
killasgroup=true
stopasgroup=true
(10)啓動supervisor
supervisord -c /etc/supervisor/supervisord.conf
(11)查看啓動情況
ps -ef | grep supervisord
(12)如果已經啓動相關進程則殺掉再啓動
kill -s SIGTERM 31333 殺掉第一個進程 這裏可以看到啓動情況
(13)配置Supervisor開機啓動
新建(如果存在就改寫)/usr/lib/systemd/system/supervisord.service
```
# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
```
(14) 開啓並驗證是否正確開啓
-執行命令
systemctl enable supervisord
-或重載
systemctl daemon-reload
-驗證命令
systemctl is-enabled supervisord