django + gunicorn + supervisor

在服務器上跑着一個Django項目,想用supervisor管理起來,遇到一個小問題,記錄一下
原本啓動Django項目的命令是用的manage.py ,  可是這中方法有個很神奇的坑,就是ctrl + c 終止程序後,端口號還被佔用,年少無知的我覺得都是這樣,偶爾用gunicorn啓動了一次,發現人家就沒這毛病,頓時感受好蠢
因此,接下來就是用gunicorn來啓動Django項目了, 對於Django項目來講,有一個自帶的wsgi.py文件,咱們用這個文件來啓動就行 ,web

在命令行的名令是:(執行命令的路徑是在manage.py所在的目錄)flask

gunicorn appproject.wsgi:application -b 0.0.0.0:8080  # appproject是項目名


這就是最基本的啓動命令, 第一次用可能會對 ` appproject.wsgi:application `  以爲奇怪,其實沒什麼,appproject.wsgi 實際上就是appproject/wsgi , 而後你打開這個wsgi文件,就知道application是怎麼回事了
若是你用gunicorn啓動的是一個flask項目,那個寫法就一目瞭然了

重點是gunicorn啓動項目,就得這麼啓動,必須有個啓動文件
還有坑就是,只能用點的方式去引用,不要用路徑的方式,那種會報錯 `  ImportError: Import by filename is not supported. `

ubuntu

好了,下面說一下supervisor的用法:
基本用法從網上一搜一大把,我就不復制了,就說一下添加一個進程該寫哪些東西,就以上面這個項目爲例,好比咱們如今要添加對這個項目的管理
1. 通常supervisor的配置目錄都在 /etc/supervisor/ 下
進到這個目錄, 打開supervisior.conf文件,注意這個文件中的最下面的include, 這個是supervisor配置的要管理的項目的配置,到這個目錄下去添加一個配置
服務器

; supervisor config file

[unix_http_server]
file=/var/run/supervisor.sock   ; (the path to the socket file)
chmod=0700                       ; sockef file mode (default 0700)

[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)

; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket

; The [include] section can just contain the "files" setting.  This
; setting can list multiple files (separated by whitespace or
; newlines).  It can also contain wildcards.  The filenames are
; interpreted as relative to this file.  Included files *cannot*
; include files themselves.

[include]
files = /etc/supervisor/conf.d/*.conf      # 注意這裏

其實這個目錄通常就是/etc/supervisor/conf.d , 剛纔應該也看到了app

2. 好了,如今進入這個目錄
若是supervisor已經在管理着其餘進程, 這裏面應該已經有一些.conf文件了, 能夠參照這些文件, 好比添加一個test.conf, 裏面的內容:socket

[program:slots_console]    # 項目名
autorestart=True        # 項目掛掉後是否自動重啓
redirect_stderr=True      # 自動記錯誤日誌
command=/mnt/slots_spin/lib/slots_admin/venv/bin/gunicorn -b 0.0.0.0:10002  slots_console_backend.wsgi:application    # 這個是重點,啓動命令, 格式是 gunicorn [參數] application   順序不要寫反, 並且application不要寫一長串路徑,不要擔憂找不到文件,目錄在下面寫
user=ubuntu  
autostart=True
directory=/mnt/slots_spin/lib/slots_admin/slots_console/slots_console_backend  # 這個是啓動命令的執行目錄

 

3. 配置好後, ` sudo supervisorctl `,進入supervisor的管理界面,首先用update命令更新一下配置,而後用status查看一下狀態,不出意外已經啓動起來了,若是有問題,去看日誌,日誌文件目錄在` supervisior.conf `文件裏有寫

this

相關文章
相關標籤/搜索