安裝使用supervisor來啟動服務


supervisor 使用方法

supervisor(官網)是一個unix的系統進程管理軟件,可以用它來管理apache、nginx等服務,
若服務掛了可以讓它們自動重啟。當然也可以用來實現golang的守護進程.

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

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

讓我們開始吧!

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

注意: 日志路徑不存在會啟動失敗! 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.自動偵測文件變化並重啟服務

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=archive          
# 改變后:                         
command=/opt/deploy/archive/archive          
...

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM