centos7 下 實現supervisor 啟動 nginx


安裝方式

  1. pip 安裝

    pip install supervisor

    pip 安裝需要 使用命令生成配置文件
    echo_supervisord_conf > /etc/supervisord.conf
    配置文件通常是把放到/etc/下面,當然也可以放到任意路徑下面,啟動supervisor時指定配置文件路徑即可。

     

  1. yum 安裝(推薦)

    **yum install supervisor** #使用yum安裝supervisor
    systemctl enable supervisord.service
    這種方式安裝好后會生成一個配置文件,路徑/etc/supervisord.conf, 可以直接編輯這個文件修改參數啥的,也可以使用剛剛上述的命令再重新生成個配置文件來編輯, 我一般都是用默認的配置(使用默認的配置前需要先備份下默認的),簡單省事(畢竟也不熟悉,用默認的安全些吧)

4. 進入supervisord.conf

vim supervisord.conf

按照下列修改-讓后重啟supervisor

修改文件一定要重啟 supervisor

supervisorctl reload

supervisorctl reread # 重新讀取配置

supervisorctl update # 更新配置

查看安裝是否成功安裝
修改前
;[inet_http_server]    
;port=127.0.0.1:9001      
;username=user              
;password=123


修改后
[inet_http_server]    
port=*:9001       # 改為 * 任何地址都能訪問
username=user     # 用戶 密碼 可自定義          
password=123    

服務器開放9001 端口

通過 http://服務器的ip:9001 就可以訪問了

 

5.配置文件參數詳解

[unix_http_server]
file=/tmp/supervisor.sock   ;UNIX socket 文件,supervisorctl用XML_RPC和supervisord通信就是通過它進行,如果不設置的話,supervisorctl也就不能用了
;chmod=0700                 ;socket文件的mode(權限),默認是0700
;chown=nobody:nogroup       ;socket文件的owner(屬組),格式:uid:gid
;username=user             ;使用supervisorctl連接的時候,認證的用戶(默認沒有用戶名)
;password=123               ;和上面的用戶名對應的密碼,可以直接使用明碼,也可以使用SHA加密(默認沒有密碼)

;[inet_http_server]         ;偵聽在TCP上的socket,Web Server和遠程的supervisorctl都要用到它不設置的話,默認為不開啟。
;port=127.0.0.1:9001       ;這個是管理后台運行的IP和端口,偵聽所有IP用:9001或*:9001。如果上面的[inet_http_server]開啟了,就必須設置它。如果開放到公網,需要注意安全性
;username=user             ;同上面的[unix_http_server]用戶名配置一致
;password=123               ;同上面的[unix_http_server]密碼配置一致

[supervisord] ;這個主要是定義supervisord這個服務端進程的一些參數的
logfile=/tmp/supervisord.log ;這個是supervisord這個主進程的日志路徑,注意和子進程的日志沒有關系。默認是 $CWD/supervisord.log,$CWD是當前目錄。
logfile_maxbytes=50MB       ;日志文件大小,默認50MB。超過50M的時候,會生成一個新的日志文件;如果設成0,表示不限制大小。
logfile_backups=10           ;日志文件保留備份數量默認10,設為0表示不備份
loglevel=info               ;日志級別,默認info,其它: critical, error, warn, info, debug, trace, or blather
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false               ;是否在前台啟動,默認是false,即以 daemon 的方式啟動
minfds=1024                 ;可以打開的文件描述符的最小值,默認 1024,低於這個值supervisor將不會啟動。
minprocs=200                 ;可以打開的進程數的最小值,默認200,低於這個值supervisor也將不會正常啟動。
;umask=022                   ;進程創建文件的掩碼,默認為022。
;user=chrism                 ; 這個參數可以設置一個非root用戶,當我們以root用戶啟動supervisord之后。我這里面設置的這個用戶,也可以對supervisord進行管理,默認情況是不設置。
;identifier=supervisor       ;這個參數是supervisord的標識符,主要是給XML_RPC用的。當你有多個supervisor的時候,而且想調用XML_RPC統一管理,就需要為每個supervisor設置不同的標識符,默認是supervisord。
;directory=/tmp             ;這個參數是當supervisord作為守護進程運行的時候,設置這個參數的話,啟動supervisord進程之前,會先切換到這個目錄默認不設置。
;nocleanup=true             ;這個參數當為false的時候,會在supervisord進程啟動的時候,把以前子進程產生的日志文件(路徑為AUTO的情況下)清除掉。有時候咱們想要看歷史日志,當 然不想日志被清除了。所以可以設置為true,默認是false,有調試需求的同學可以設置為true。
;childlogdir=/tmp           ;當子進程日志路徑為AUTO(系統自動分配)的時候,子進程日志文件的存放路徑。
;environment=KEY="value"     ;這個是用來設置環境變量的,supervisord在linux中啟動默認繼承了linux環境變量,在這里可以設置supervisord進程特有的其他環境變量。supervisord啟動子進程時,子進程會拷貝父進程的內存空間內容。 所以設置的這些環境變量也會被子進程繼承。默認為不設置。
;strip_ansi=false           ;這個選項如果設置為true,會清除子進程日志中的所有ANSI 序列。什么是ANSI序列呢?就是我們的\n,\t這些東西。默認為false。

[supervisorctl] ;這個主要是針對supervisorctl的一些配置  
serverurl=unix:///tmp/supervisor.sock ;通過UNIX socket連接supervisord,路徑與unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通過HTTP的方式連接supervisord
;username=chris             ;用戶名,默認空
;password=123               ;密碼,默認空。
;prompt=mysupervisor         ;輸入用戶名密碼時候的提示,默認supervisor。                  
;history_file=~/.sc_history ;這個參數和shell中的history類似,我們可以用上下鍵來查找前面執行過的命令默認是no file的。所以我們想要有這種功能,必須指定一個文件。


;[program:xx]     ;是被管理的進程配置參數,xx是進程的名稱
;command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ;程序啟動命令;可以帶參數,如:/home/test.py -a 'hehe'有一點需要注意的是,我們的command只能是那種在終端運行的進程,不能是守護進程。這個想想也知道了,比如說command=service httpd start。httpd這個進程被linux的service管理了,我們的supervisor再去啟動這個命令,這已經不是嚴格意義的子進程了。
;directory=/tmp               ;進程運行前,會前切換到這個目錄
;autostart=true             ;在supervisord啟動的時候也自動啟動
;startsecs=10         ;啟動10秒后沒有異常退出,就表示進程正常啟動了,默認為1秒。
;autorestart=true     ;程序退出后自動重啟,可選值:[unexpected,true,false],默認為unexpected,表示進程意外殺死后才重啟
這個是設置子進程掛掉后自動重啟的情況,如果為false的時候,無論什么情況下,都不會被重新啟動,如果為unexpected,只有當進程的退出碼不在下面的exitcodes里面定義的退出碼的時候,才會被自動重啟。當為true的時候,只要子進程掛掉,將會被無條件的重啟。                              
;exitcodes=0,2               ;注意和上面的的autorestart=unexpected對應。exitcodes里面的定義的退出碼是expected的。
;stopsignal=QUIT             ;進程停止信號,可以為TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信號。默認為TERM 。當用設定的信號去干掉進程,退出碼會被認為是expected。    
;stopwaitsecs=10             ;這個是當我們向子進程發送stopsignal信號后,到系統返回信息給supervisord,所等待的最大時間。 超過這個時間,supervisord會向該子進程發送一個強制kill的信號。 默認為10秒。
;startretries=3       ;啟動失敗自動重試次數,默認是3。當超過3次后,supervisor將把此進程的狀態置為FAIL
;user=tomcat         ;用哪個用戶啟動進程,默認是root。如果supervisord是root啟動,我們在這里設置這個非root用戶,可以用來管理該program。
;priority=999         ;進程啟動優先級,默認999,值小的優先啟動
;redirect_stderr=true ;把stderr重定向到stdout,默認false
;stdout_logfile_maxbytes=20MB ;stdout日志文件大小,默認50MB
;stdout_logfile_backups = 20 ;stdout日志文件備份數,默認是10
;stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out ;進程的stdout的日志路徑,可以指定路徑,AUTO,none等三個選項。設置為none的話,將沒有日志產生。設置為AUTO的話,將隨機找一個地方生成日志文件,而且當supervisord重新啟動的時候,以前的日志文件會被清空。當 ;redirect_stderr=true的時候,sterr也會寫進這個日志文件。需要注意當指定目錄不存在時無法正常啟動,所以需要手動創建目錄(supervisord 會自動創建日志文件)
;stopasgroup=false   ;默認為false,進程被殺死時,是否向這個進程組發送stop信號,包括子進程。主要用於,supervisord管理的子進程,這個子進程本身還有子進程。那么我們如果僅僅干掉supervisord的子進程的話,子進程的子進程有可能會變成孤兒進程。所以咱們可以設置可個選項,把整個該子進程的整個進程組都干掉。 設置為true的話,一般killasgroup也會被設置為true。需要注意的是,該選項發送的是stop。默認為false。
;killasgroup=false     ;信號默認為false,不過向進程組發送的是kill信號
;stderr_capture_maxbytes=1MB   ;這個一樣,和stdout_capture一樣。 默認為0,關閉狀態
;stderr_events_enabled=false   ;這個也是一樣,默認為false
;environment=A="1",B="2"       ;這個是該子進程的環境變量,和別的子進程是不共享的
;serverurl=AUTO    

;[group:thegroupname] ;就是給programs(子進程)分組,划分到組里面的program。我們就不用一個一個去操作了,我們可以對組名進行統一的操作。 注意:program被划分到組里面之后,就相當於原來的配置從supervisor的配置文件里消失了。supervisor只會對組進行管理,而不再會對組里面的單個program進行管理了
;programs=progname1,progname2 ;組成員,用逗號分開。
;priority=999                 ;優先級,相對於組和組之間說的。默認999。

;包含其它配置文件 ;當我們要管理的進程很多的時候,都寫在主配置文件就不太合適了,這個時候可以把配置信息寫到多個文件中,然后include過來

簡單的命令

啟動 supervisor
指定配置文件啟動
supervisord -c /etc/supervisor/supervisord.conf

修改文件一定要重啟 supervisor
supervisorctl reload
supervisorctl reread # 重新讀取配置
supervisorctl update # 更新配置
supervisorctl restart nginx # 重啟 nginx
killall nginx # 殺掉所有的 nginx 進程

6.在etc下新建 supervisord.d

在supervisord.conf 中  找到 [include]修改

[include]
files = supervisord.d/*.ini   ;可以指定一個或多個以.ini結束的配置文件

7.新建一個用於啟動nginx 的文件

也就是說我只要編輯文件名以.ini結尾的配置文件放在/etc/supervisord.d路徑下就行,當然之后還得重啟下supervisor才行。

文件為 nginx.ini

[program:nginx]
command=/usr/local/nginx/./sbin/nginx -g 'daemon off;' ; 啟動命令
user=root                                               ; 啟動命令
autostart=false                                         ;在 啟動 5 秒后沒有異常退出,就當作已經正常啟動了
autorestart=true ;程序異常退出后自動重啟
stopasgroup=true                                       ;
killasgroup=true                                       ;
stdout_logfile=/etc/supervisord.d/nginx-out.log         ;
stderr_logfile=/etc/supervisord.d/nginx-err.log         ;

然后再次執行

修改文件一定要重啟 supervisor
supervisorctl reload
supervisorctl reread # 重新讀取配置
supervisorctl update # 更新配置



參考 (18條消息) centos7安裝supervisor以及簡單使用_水月洞天-CSDN博客

 


免責聲明!

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



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