安裝使用supervisor來啓動服務

學完這篇教程後,我們希望達到如下的目標:

  • 服務掛掉後,自動重啓
  • 可執行文件或者配置文件修改後,服務自動重啓

讓我們開始吧!

1.supervisor安裝

1.以上tar包任意目錄解壓

# ubuntu安裝:
sudo apt-get install supervisor 
# centos安裝
yum install -y supervisor 
# 基於python庫安裝
pip2 install supervisor
easy_install supervisor

安裝好之後,不出問題的話supervisor服務已經啓動完成。

查看進程是否啓動成功

pgrep supervisord

出現進程號之後表面成功啓動

手動啓動進程

如果上一步沒發現進程號,那麼可以執行下面的命令

supervisord -c  /etc/supervisor/supervisord.conf

2.supervisor配置

打開配置文件supervisord.conf

# 配置文件一般在如下位置:
> vim /etc/supervisor/supervisord.conf 

我們可以看到文件的最後有這麼一句話

[include]
files = /etc/supervisor/conf.d/*.conf

也就是說配置文件會引入/etc/supervisor/conf.d/目錄下所有conf後綴的文件.

創建自定義的服務配置文件

所以我們可以在/etc/supervisor/conf.d/下建立文件ipfs.conf

這裏是以啓動ipfs爲例, 日誌路徑不存在的要自己新建, supervisor不會自己創建目錄

; 設置進程的名稱,使用 supervisorctl 來管理進程時需要使用該進程名
[program:ipfs] 
directory = /usr/local/bin            ; 程序的啓動目錄
command=/usr/local/bin/ipfs daemon    ; 啓動命令 最好絕對路徑
autostart = true                      ; 在 supervisord 啓動的時候也自動啓動
numprocs=1                            ; 默認爲1
process_name=%(program_name)s         ; 默認爲 %(program_name)s,即 [program:x] 中的 x
user=root                             ; 使用 root 用戶來啓動該進程
autorestart=true                      ; 程序崩潰時自動重啓,重啓次數是有限制的,默認爲3次
redirect_stderr=true                  ; 重定向輸出的日誌
stdout_logfile = /var/log/supervisord/tornado_server.log
loglevel=info

配置文件中的註釋以;打頭

保存配置文件,重啓

> supervisorctl reload

3.supervisor常用命令

supervisor有supervisord和supervisorctl兩種命令類型:

  • supervisord是服務相關的命令
  • supervisorctl是客戶端相關的命令

supervisor涉及的狀態主要有

  • running:進程處於運行狀態
  • starting:Supervisor 收到啓動請求後,進程處於正在啓動過程中
  • stopped:進程處於關閉狀態
  • stopping:Supervisor 收到關閉請求後,進程處於正在關閉過程中
  • backoff:進程進入 starting 狀態後,由於馬上就退出導致沒能進入 running 狀態
  • fatal:進程沒有正常啓動
  • exited:進程從 running 狀態退出

常用的命令如下:

#關閉所有任務
supervisorctl shutdown 
# 啓動某個進程
supervisorctl start programxxx
# 重啓某個進程
supervisorctl restart programxxx
# 停止全部進程 注:start、restart、stop都不會載入最新的配置文件
supervisorctl stop all
# 載入最新的配置文件,停止原有進程並按新的配置啓動、管理所有進程。
supervisorctl reload
# 根據最新的配置文件,啓動新配置或有改動的進程,配置沒有改動的進程不會受影響而重啓。
supervisorctl update

注意:顯式用stop停止掉的進程,用reload或者update都不會自動重啓

4.可能遇到的錯誤

無權限錯誤

error: <class 'socket.error'>, [Errno 2] No such file or directory: 
file: /usr/lib/python2.7/socket.py line: 228

解決方案: 重啓服務

> supervisord -c /etc/supervisor/supervisord.conf 
Error: The directory named as part of the path /var/log/supervisor/archive/info.log    does not exist. in section 'program:archive' (file: '/etc/supervisor/conf.d/archive.conf')
For help, use /usr/bin/supervisord -h

或者可能是supervisor服務未啓動

> service  supervisor  start 

配置命令錯誤

參考鏈接: supervisorctl always reports error: ERROR (no such file)

> sudo supervisorctl start archive
archive: ERROR (no such file)

執行下面命令發現報錯

> sudo supervisorctl status
archive                          FATAL     can't find command './archive'

說明supervisor無法解析該指令
解決方法:配置文件執行指令補全

[program:archive]                            
command=/opt/deploy/archive/archive          
...

參考文章
ubuntu中supervisor的安裝及配置

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章