正確離線安裝supervisor

正確離線安裝supervisor

supervisor簡介

supervisor是一個用python語言編寫的進程管理工具,它能夠很方便的監聽、啓動、中止、重啓一個或多個進程。當一個進程意外被殺死,supervisor監聽到進程死後,能夠很方便的讓進程自動恢復,再也不須要程序員或系統管理員本身編寫代碼來控制。html

supervisor 會涉及三個重要的命令

  • supervisord

能夠理解成supervisor的服務端python

運行supervisor時會啓動一個進程supervisord,它負責啓動所管理的進程,並將所管理的進程做爲本身的子進程來啓動,並且能夠在所管理的進程出現崩潰時自動重啓linux

  • supervisorctl

能夠理解成supervisor的客戶端ios

supervisorctl是命令行管理工具,能夠用以下命令來進行子進程的管理,如:程序員

preview

  • echo_supervisord_conf

用來生成默認的配置文件,通常生成默認文件爲 supervisor.confvim

supervisor安裝的前期準備(所有使用壓縮包的方式)bash

supervisor是用python寫的運行在linux下的進程管理工具,安裝supervisor的時候依賴 python的一些包,它依賴:python、setuptools、meld3socket

一、python安裝

能夠參考此處安裝python:https://www.cnblogs.com/winte...工具

下載python連接:https://www.python.org/ftp/py...測試

下載相應的壓縮包,如:wget https://www.python.org/ftp/py...

tar -xvf Python-3.6.8.tgz

二、setuptools安裝

https://pypi.python.org/pypi/...

下載壓縮包,用tar解壓壓縮包,安裝,如

tar -zxvf setuptools-0.6c11.tar.gz cd setuptools-0.6c11 python setup.py install

三、meld3安裝

https://pypi.python.org/pypi/...

wget https://pypi.python.org/packa...

tar -zxvf meld3-1.0.2.tar.gz cd meld3-1.0.2 python setup.py install

四、supervisor安裝

tar -zxvf supervisor-3.3.1.tar.gz cd supervisor-3.3.1 python setup.py install

此處 supervisor安裝後會生成咱們關心的以下幾個可執行程序:

  • supervisord 路徑
supervisord:  /usr/local/bin/supervisord
  • supervisorctl 路徑
supervisorctl:  /usr/local/bin/supervisorctl
  • echo_supervisord_conf 路徑
echo_supervisord_conf:  /usr/local/bin/echo_supervisord_conf

img

驗證supervisor是否安裝成功

supervisorctl --help

preview

supervisor配置

建立必要目錄和文件

  • 建立 /etc/supervisor 目錄
mkdir /etc/supervisor
  • echo_supervisord_conf 生成supervisord.conf
echo_supervisord_conf  > /etc/supervisor/supervisord.conf

修改/etc/supervisor/supervisord.conf文件內容

  • 將unix_http_server 下的 file 路徑改掉,以下:
[unix_http_server] 
file=/var/run/supervisor.sock  ; (the path to the socket file)

preview

  • 將supervisord 下的logfile 路徑 和 pidfile 路徑 改掉,以下:
[supervisorctl] 
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket

preview

  • 將include 下的 files 路徑改掉,以下:
[include] files = conf.d/*.conf

根據上述修改的路徑,建立相應的文件和添加權限

建立文件:

touch /var/run/supervisor.sock 
touch /var/log/supervisord.log 
touch /var/run//supervisord.pid 
mkdir /etc/supervisor/conf.d 
添加權限 
chmod 777 /var/run chmod 777 /var/log

編寫本身須要監控的子進程程序

子程序配置文件的編寫

/etc/supervisor/conf.d 目錄下建立本身的子進程配置文件,如:

/etc/supervisor/conf.d 建立文件 test.conf

[program:test] 
process_name=%(program_name)s_%(process_num)02d 
command= go run main.go         # 運行命令 
directory=/home/qb/              # 運行文件目錄 
autostart=true                   # 自動啓動 
autorestart=true                 # 自動從新啓動 
user=root                       # 哪個用戶執行 
redirect_stderr=true             #重定向錯誤

preview

子程序的編寫

其中上述 main.go 是我臨時寫的一個demo程序,簡單循環1秒鐘寫入字符串到文件中(寫到文件中是爲了便於查看效果),如:

package main
import (   "fmt"   "os/exec"   "time")

func main() {   

  for {     
          cmd := exec.Command("/bin/bash", "-c", `echo 222 >> a.txt`)     
          stdout, err := cmd.StdoutPipe()    
          if err != nil {      
              fmt.Printf("Error:can not obtain stdout pipe for command:%s\n", err)       
          return    
    }    

   //執行命令    
   if err := cmd.Start(); err != nil {
         fmt.Println("Error:The command is err,", err)       
         return     
    }     

  fmt.Println(stdout) 
  time.Sleep(time.Second * time.Duration(1))   
}

啓動superviosr

一、unlink一下

unlink /var/run/supervisor.sock

二、啓動supervisor:

supervisord -c /etc/supervisor/supervisord.conf

三、查看程序運行狀態

supervisorctlstatus

查看效果

img

子程序是 每間隔1秒鐘 向 a.txt文件中寫入字符串 222

img

進一步測試

  • 刪掉子進程,測試supervisor是否會拉起子進程

img

將supervisor加入到開啓啓動服務中

一、寫服務文件

vim /usr/lib/systemd/system/supervisord.service

supervisord.service

[Unit] 

Description=Supervisor daemon 

[Service] 

Type=forking ExecStart=/usr/local/bin/supervisord -c /etc/supervisor/supervisord.conf 

ExecStop=/usr/local/bin/supervisorctl shutdown 

ExecReload=/usr/local/bin/supervisorctl reload 

KillMode=process Restart=on-failure 

RestartSec=42s 

[Install] 

WantedBy=multi-user.target

二、使能服務

systemctl enable supervisord

三、驗證是否使能成功

systemctl is-enabled supervisord

出現enable說明成功

img

四、重啓機器驗證 supervisor是否隨開機

經常使用命令提示

service supervisord start #啓動程序 

service supervisord stop #中止程序 

service supervisord status #查看狀態 

supervisorctl shutdown #關閉全部任務

 supervisorctl stop|start 子程序名字 #啓動或中止服務 

supervisorctl status #查看全部任務狀態

異常狀況提供參考

切記必定要把目錄名,文件名 所有寫正確,不要本身坑了本身!!

一、error: <class 'socket.error'>, [Errno 111] Connection refused: file: /usr/lib64/python2.6/socket.py line: 567

解決方式: 使用指定配置文件的方式處理

supervisord -c /etc/supervisor/supervisord.conf

二、初始化配置文件 echo_supervisord_conf 報錯

解決方式:手動建立配置文件路徑

mkdir /etc/supervisor

echo_supervisord_conf > /etc/supervisor/supervisord.conf

三、操做supervisorctl 查看沒有test進程

解決方式:/etc/supervisor/supervisord.conf 中 打開 include 模塊

img

四、Unlinking stale socket /tmp/supervisor.sock

解決方式:

unlink /var/run/supervisor.sock

做者:小魔童哪吒

相關文章
相關標籤/搜索