在服務器上跑着一個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