文檔:http://supervisord.org/introduction.html
supervisor
是什麼我就不說了,下面就來說一下我一天半的安裝踩坑之旅。
我是在 Ubuntu 系統上進行的安裝,採用的是 apt-get
的方式:
sudo apt-get install supervisor
一、安裝
1、使用上面的命令進行安裝。
2、安裝成功後你需要在終端進入到 /etc/supervisor
文件夾,然後輸入 echo_supervisord_conf
ouer@ouer-virtual-machine:/etc/supervisor$ echo_supervisord_conf
然後正常情況下你應該會看到,控制檯輸出一堆內容(其實是supervisor的默認配置文件的內容)
然後再執行:
ouer@ouer-virtual-machine:/etc/supervisor$ echo_supervisord_conf > /etc/supervisor/supervisord.conf
如果出現沒有權限的問題,可以使用這條命令
sudo su - root -c "echo_supervisord_conf > /etc/supervisor/supervisord.conf"
就是把配置文件(supervisord.conf)創建到 /etc/supervisor
文件夾下。
3、使用這種方式創建的默認配置文件有些地方是需要更改的。
supervisord.pid 以及 supervisor.sock 是放在 /tmp 目錄下,但是 /tmp 目錄是存放臨時文件,裏面的文件是會被 Linux 系統刪除的,一旦這些文件丟失,就無法再通過 supervisorctl 來執行 restart 和 stop 命令了。會報錯。
因此:
[unix_http_server]
;file=/tmp/supervisor.sock ; (the path to the socket file)
;修改爲 /var/run 目錄,避免被系統刪除
file=/var/run/supervisor.sock ; (the path to the socket file)
;chmod=0700 ; socket file mode (default 0700)
;chown=nobody:nogroup ; socket file uid:gid owner
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))
;[inet_http_server] ; inet (TCP) server disabled by default
;port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for ;all iface)
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))
...
[supervisord]
;logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
;修改爲 /var/log 目錄,避免被系統刪除
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
;pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
;修改爲 /var/run 目錄,避免被系統刪除
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
...
;設置啓動supervisord的用戶,一般情況下不要輕易用root用戶來啓動,除非你真的確定要這麼做
;user=chrism ; (default is current user, required if root)
...
[supervisorctl]
; 必須和'unix_http_server'裏面的設定匹配
;serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
;修改爲 /var/run 目錄,避免被系統刪除
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris ; should be same as http_username if set
;password=123 ; should be same as http_password if set
...
設置好配置文件後,應先創建上述配置文件中新增的文件夾。如果指定了啓動用戶 user,那麼應注意相關文件的權限問題,包括日誌文件,否則會出現沒有權限的錯誤。
Error: Cannot open an HTTP server: socket.error reported errno.EACCES (13)
需要爲剛纔創建的文件夾賦予權限:
sudo chmod 777 /run
sudo chmod 777 /var/log
4、還有個 include
的問題:
其實你把自己的項目配置在默認配置文件中也可以,不過我可不想那麼幹。因此就的說到include
。在默認的配置文件中include是被註釋了的(;
),首先你需要打開註釋,然後配置你自己的配置文件的路徑。
[include]
files = /etc/supervisord.d/*.ini 可以是.conf 或者 .ini
5、使用瀏覽器管理
supervisor 同時提供了通過瀏覽器來管理進程的方法,只需要打開下面代碼的註釋就可以了。(就是把前面的;刪除)
;[inet_http_server] ; inet (TCP) server disabled by default
;port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for ;all iface)
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))
然後通過瀏覽器訪問 127.0.0.1:9001
就會看到管理界面。
二、命令
supervisord : 啓動supervisor
supervisorctl reload :修改完配置文件後重新啓動supervisor
supervisorctl status :查看supervisor監管的進程狀態
supervisorctl start 進程名 :啓動XXX進程
supervisorctl stop 進程名 :停止XXX進程
supervisorctl stop all:停止全部進程,注:start、restart、stop都不會載入最新的配置文件。
supervisorctl update:根據最新的配置文件,啓動新配置或有改動的進程,配置沒有改動的進程不會受影響而重啓
參考博客:http://www.cnblogs.com/restran/p/4854623.html
參考博客:http://www.ttlsa.com/linux/using-supervisor-control-program/