supervisor進(jìn)程守護(hù)在Centos 6和Ubuntu16.04上設(shè)置與使用

supervisor 是一款進(jìn)程守護(hù)的軟件往声,具備極其強(qiáng)大的功能。一般來說戳吝,Linux對程序的自動啟動有著非常的嚴(yán)格的限制浩销。實際上有時我們需要開機(jī)啟動一條命令,這樣的操作在Linux上直接設(shè)置是很困難的听哭。好在Ubuntu 16.04目前采用了systemctl進(jìn)行程序自啟控制慢洋,但是使用起來仍然比較繁瑣。因此supervisor可以說是每臺Linux上必備的軟件陆盘。目前我只用到它的兩個功能

  • 1普筹、管理程序自啟
  • 2、程序掛掉之后自動啟動

安裝

安裝直接用pip安裝即可

pip install supervisor

supervisor需要有個配置文件隘马,此文件可用supervisor官方命令生成太防,生成此文件需要有root權(quán)限

sudo echo_supervisord_conf > /etc/supervisord.conf

上述的/etc/supervisord.conf是在etc目錄下生成配置文件,配置文件默認(rèn)的名字就是supervisord.conf酸员,一般不要修改成其他的名字蜒车。對于配置文件的位置讳嘱,官方說是有默認(rèn)的位置的Configuration File

image.png

如果直接運行

supervisord

supervisord就會依次從上述目錄下尋找supervisord.conf。
參考Installing and Configuring Supervisor on Ubuntu 16.04酿愧,里面的教程

echo_supervisord_conf > /etc/supervisor/supervisord.conf     #在/etc/supervisor/目錄下生成配置文件
mkdir /etc/supervisor/conf.d            # 在/etc/supervisor/下創(chuàng)建conf.d的文件夾沥潭,用于存放各種小的配置文件

此時打開supervisord.conf,翻到最后嬉挡,將最后兩行取消注釋并修改為如下

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

supervisor支持include各種各樣的配置文件钝鸽,就在conf.d文件夾內(nèi),只要是.conf后綴都會被程序識別棘伴。
這樣寞埠,supervisor的啟動步驟就是

supervisord -c /etc/supervisor/supervisord.conf

配置程序

supervisor的使用可以參考yang xiang的博客
總結(jié)來說屁置,就在我們創(chuàng)建的conf.d文件夾中設(shè)置我們需要啟動的命令即可焊夸。
譬如我們創(chuàng)建了一個frp.conf的文件,內(nèi)容如下

[program:my_frps]
command = /root/application/frp/frps -c /root/application/frp/frps_full.ini  
autostart = true
autorestart = true
user = root

其中my_frps是program的名字蓝角,command是啟動frps的具體命令阱穗,就和在shell中敲的一樣,user即為指定的運行用戶使鹅。至于我們的文件名揪阶,frp.conf是沒有什么意義的,只要他是.conf為后綴即可患朱。

supervisord 和 supervisorctl辨析

supervisor一共有兩個(實際上好幾個)主要的函數(shù)鲁僚,supervisord 和 supervisorctl。前者就類似服務(wù)端裁厅,用于啟動supervisor服務(wù)冰沙,后者就像客戶端,用于控制某些程序的start执虹、stop 和 restart.

supervisorctl my_frps start          #啟動frps
supervisorctl my_frps stop          #關(guān)閉frps

更詳細(xì)的操作可以參考supervisor(一)基礎(chǔ)篇

設(shè)置supervisor開機(jī)自啟

supervisor是控制其他程序啟動的拓挥,可是他自己的啟動應(yīng)該如何操作呢。對于Ubuntu16.04和centos 7引入了systemctl袋励,大大簡化了自啟程序的設(shè)置侥啤。
我們只需要把supervisor設(shè)置為系統(tǒng)服務(wù),放到/etc/systemd/system/目錄下即可茬故。教程仍然參考Installing and Configuring Supervisor on Ubuntu 16.04

vim /etc/systemd/system/supervisord.service
[Unit]
Description=Supervisor daemon
Documentation=http://supervisord.org
After=network.target

[Service]
ExecStart=/usr/local/bin/supervisord -n -c /etc/supervisor/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/local/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

注意原版的教程有句話Alias=supervisord.service盖灸,這句話請不要加,否則會報錯磺芭。將supervisord.service加入開機(jī)自啟中糠雨。

systemctl enable supervisord.service

此時重啟,就會發(fā)現(xiàn)徘跪,supervisor已經(jīng)啟動了甘邀。

在centos 6.5 上自動啟動

設(shè)置開機(jī)自啟琅攘,參考教程

vim /etc/init.d/supervisord
#!/bin/bash
#
# supervisord   This scripts turns supervisord on
# chkconfig:    345 83 04
# description:  supervisor is a process control utility.  It has a web based
#              xmlrpc interface as well as a few other nifty features.
#
 
# source function library
. /etc/rc.d/init.d/functions
 
set -a
 
PREFIX=/usr
 
SUPERVISORD=$PREFIX/bin/supervisord
SUPERVISORCTL=$PREFIX/bin/supervisorctl
 
PIDFILE=/var/supervisor/supervisord.pid
LOCKFILE=/var/supervisor/supervisord.lock
 
OPTIONS="-c /etc/supervisor/supervisord.conf"
 
# unset this variable if you don't care to wait for child processes to shutdown before removing the $LOCKFILE-lock
WAIT_FOR_SUBPROCESSES=yes
 
# remove this if you manage number of open files in some other fashion
ulimit -n 96000
 
RETVAL=0
 
 
running_pid()
{
  # Check if a given process pid's cmdline matches a given name
  pid=$1
  name=$2
  [ -z "$pid" ] && return 1
  [ ! -d /proc/$pid ] && return 1
  (cat /proc/$pid/cmdline | tr "\000" "\n"|grep -q $name) || return 1
  return 0
}
 
running()
{
# Check if the process is running looking at /proc
# (works for all users)
 
  # No pidfile, probably no daemon present
  [ ! -f "$PIDFILE" ] && return 1
  # Obtain the pid and check it against the binary name
  pid=`cat $PIDFILE`
  running_pid $pid $SUPERVISORD || return 1
  return 0
}
 
start() {
    echo "Starting supervisord: "
 
    if [ -e $PIDFILE ]; then
    echo "ALREADY STARTED"
    return 1
  fi
 
  # start supervisord with options from sysconfig (stuff like -c)
    $SUPERVISORD $OPTIONS
 
  # show initial startup status
  $SUPERVISORCTL $OPTIONS status
 
  # only create the subsyslock if we created the PIDFILE
    [ -e $PIDFILE ] && touch $LOCKFILE
}
 
stop() {
    echo -n "Stopping supervisord: "
    $SUPERVISORCTL $OPTIONS shutdown
  if [ -n "$WAIT_FOR_SUBPROCESSES" ]; then
      echo "Waiting roughly 60 seconds for $PIDFILE to be removed after child processes exit"
      for sleep in  2 2 2 2 4 4 4 4 8 8 8 8 last; do
        if [ ! -e $PIDFILE ] ; then
          echo "Supervisord exited as expected in under $total_sleep seconds"
          break
        else
          if [[ $sleep -eq "last" ]] ; then
            echo "Supervisord still working on shutting down. We've waited roughly 60 seconds, we'll let it do its thing from here"
            return 1
          else
            sleep $sleep
            total_sleep=$(( $total_sleep + $sleep ))
          fi
 
        fi
      done
    fi
 
    # always remove the subsys. We might have waited a while, but just remove it at this point.
    rm -f $LOCKFILE
}
 
restart() {
    stop
    start
}
 
case "$1" in
  start)
    start
    RETVAL=$?
    ;;
  stop)
    stop
    RETVAL=$?
    ;;
  restart|force-reload)
    restart
    RETVAL=$?
    ;;
  reload)
    $SUPERVISORCTL $OPTIONS reload
    RETVAL=$?
    ;;
  condrestart)
    [ -f $LOCKFILE ] && restart
    RETVAL=$?
    ;;
  status)
    $SUPERVISORCTL $OPTIONS status
    if running ; then
      RETVAL=0
    else
      RETVAL=1
    fi
    ;;
  *)
    echo $"Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
    exit 1
esac
 
exit $RETVAL

需要修改的幾處

PREFIX=/usr
 
SUPERVISORD=$PREFIX/bin/supervisord      ##supervisord   程序的安裝路徑
 
SUPERVISORCTL=$PREFIX/bin/supervisorctl  ##supervisorctl 程序的安裝路徑
 
PIDFILE=/var/supervisor/supervisord.pid   ##需要先創(chuàng)建/var/supervisor目錄
 
LOCKFILE=/var/supervisor/supervisord.lock
 
OPTIONS="-c /etc/supervisor/supervisord.conf"   ##配置文件的路徑

保存完畢之后,可以執(zhí)行以下命令修改文件權(quán)限:

chmod 777 /etc/init.d/supervisord
 
/etc/init.d/supervisord  start
或
service supervisord start

到這一步松邪,一定要測試一下新建的supervisord的命令是否正常運行且不報錯坞琴,如果報錯,需要進(jìn)行針對性的修改逗抑。
配置自動開機(jī)命令

chkconfig supervisord  on
chkconfig --list | grep  supervisord

supervisor的使用可以參考yang xiang的博客

假設(shè)想守護(hù)frps進(jìn)程剧辐,并令其開機(jī)啟動。在/etc/supervisord.conf最后加入下面的話邮府。

[program:frps]
command = /root/Downloads/frp_0.10.0_linux_amd64/frps -c /root/Downloads/frp_0.10.0_linux_amd64/frps.ini
autostart = true
autorestart = true
user = root

其中command是啟動frps的命令荧关。

service supervisord restart
supervisorctl reload
supervisorctl start frpc
supervisorctl stop frpc

在Ubuntu14.04上設(shè)置

先附兩個教程
Ubuntu 14.04下進(jìn)程管理工具supervisor安裝
supervisor安裝部署文檔和管理實例

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市褂傀,隨后出現(xiàn)的幾起案子忍啤,更是在濱河造成了極大的恐慌,老刑警劉巖仙辟,帶你破解...
    沈念sama閱讀 212,686評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件同波,死亡現(xiàn)場離奇詭異,居然都是意外死亡叠国,警方通過查閱死者的電腦和手機(jī)未檩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來粟焊,“玉大人冤狡,你說我怎么就攤上這事∠钐模” “怎么了悲雳?”我有些...
    開封第一講書人閱讀 158,160評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沾乘。 經(jīng)常有香客問我怜奖,道長,這世上最難降的妖魔是什么翅阵? 我笑而不...
    開封第一講書人閱讀 56,736評論 1 284
  • 正文 為了忘掉前任歪玲,我火速辦了婚禮,結(jié)果婚禮上掷匠,老公的妹妹穿的比我還像新娘滥崩。我一直安慰自己,他們只是感情好讹语,可當(dāng)我...
    茶點故事閱讀 65,847評論 6 386
  • 文/花漫 我一把揭開白布钙皮。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪短条。 梳的紋絲不亂的頭發(fā)上导匣,一...
    開封第一講書人閱讀 50,043評論 1 291
  • 那天,我揣著相機(jī)與錄音茸时,去河邊找鬼贡定。 笑死,一個胖子當(dāng)著我的面吹牛可都,可吹牛的內(nèi)容都是我干的缓待。 我是一名探鬼主播,決...
    沈念sama閱讀 39,129評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼渠牲,長吁一口氣:“原來是場噩夢啊……” “哼旋炒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起签杈,我...
    開封第一講書人閱讀 37,872評論 0 268
  • 序言:老撾萬榮一對情侶失蹤瘫镇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后芹壕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汇四,經(jīng)...
    沈念sama閱讀 44,318評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡接奈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,645評論 2 327
  • 正文 我和宋清朗相戀三年踢涌,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片序宦。...
    茶點故事閱讀 38,777評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡睁壁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出互捌,到底是詐尸還是另有隱情潘明,我是刑警寧澤,帶...
    沈念sama閱讀 34,470評論 4 333
  • 正文 年R本政府宣布秕噪,位于F島的核電站钳降,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏腌巾。R本人自食惡果不足惜遂填,卻給世界環(huán)境...
    茶點故事閱讀 40,126評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望澈蝙。 院中可真熱鬧吓坚,春花似錦、人聲如沸灯荧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至哆窿,卻和暖如春链烈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背挚躯。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評論 1 267
  • 我被黑心中介騙來泰國打工测垛, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秧均。 一個月前我還...
    沈念sama閱讀 46,589評論 2 362
  • 正文 我出身青樓食侮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親目胡。 傳聞我的和親對象是個殘疾皇子锯七,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,687評論 2 351

推薦閱讀更多精彩內(nèi)容