linux服务与进程管理sup,linux下进程管理工具-supervisord
一 簡介
supervisord是linux下的一個優秀的進程管理工具,通過supervisord可以方便管理和應用linux系統下服務進程過多的問題,其支持服務異常退出自動重啟,通過瀏覽器管理控制相關進程服務的運行狀況,進程異常服務通知等等。
二 安裝
2.1 通過分發包安裝
[root@node1 setuptools-36.7.0]# yum info supervisor
[root@node1 setuptools-36.7.0]# yum -y install supervisor
2.2 通過PIP安裝
pip install supervisor
2.3 創建配置文件
supervisor安裝完成后打印樣本配置文件
[root@node1 ~]# echo_supervisord_conf
生成配置文件
[root@node1 ~]# echo_supervisord_conf > /etc/supervisord.conf
三 運行supervisord
3.1 查看superviosrd命令路徑
[root@node1 ~]# which supervisord
/usr/bin/supervisord
3.2 運行supervisord
添加程序,將cat程序添加到superviosrd進程啟動如下配置
vim /etc/supervisord.conf
[program:foo]
command = / bin / cat
其他可參考[program:x]配置段配置
supervisord運行時默認執行守護進程,跟-n選項是superviosrd在前臺執行,這樣對調試有好處。
-c選項可以指定搜索superviosrd配置文件,如果沒有改選項則supervisord將在默認位置搜索其配置文件。這對安全有一定的作用,如果沒有-c選項則用戶已超級管理員身份啟動時會發出警告。
supervisord命令行選項
-c FILE, --configuration=FILE
supervisord配置文件的路徑。
-n, --nodaemon 在前臺運行supervisord。
-h, --help 顯示supervisord命令幫助。
-u USER, --user=USER
UNIX用戶名或數字用戶標識。如果supervisord以root用戶身份啟動,請在啟動過程中盡快將setuid設置為該用戶。
-m OCTAL, --umask=OCTAL
八進制數(例如022)代表supervisord在啟動后應使用的umask。
-d PATH, --directory=PATH
當supervisord作為守護進程運行時,請在守護進程之前切換到此目錄。
-l FILE, --logfile=FILE
用作supervisord活動日志的文件名路徑。
-y BYTES, --logfile_maxbytes=BYTES
發生旋轉之前的supervisord活動日志文件的最大大小。該值是后綴相乘的,例如“1”是一個字節,“1MB”是1兆字節,“1GB”是1千兆字節。
-y NUM, --logfile_backups=NUM
要保留的supervisord活動日志的備份副本數。每個日志文件的大小都是logfile_maxbytes。
-e LEVEL, --loglevel=LEVEL
主管應寫入活動日志的日志記錄級別。有效的級別是跟蹤,調試,信息,警告, 錯誤和關鍵。
-j FILE, --pidfile=FILE
supervisord應該寫入其pid文件的文件名。
-i STRING, --identifier=STRING
各種客戶端UI為這個監督者實例公開的任意字符串標識符。
-q PATH, --childlogdir=PATH
目錄的路徑(它必須已經存在),其中主管將寫入其AUTO- MODE子進程日志。
-k, --nocleanup
防止supervisord在啟動時執行清理(刪除舊的AUTO進程日志文件)。
-a NUM, --minfds=NUM
在supervisord進程成功啟動之前必須可用的文件描述符的最小數量。
-t, --strip_ansi
從所有子日志進程中去除ANSI轉義序列。
-v, --version 將supervisord版本號輸出到標準輸出并退出。
--profile_options=LIST
用于分析的逗號分隔選項列表。導致 supervisord在分析器下運行,并根據選項輸出結果,該選項是以逗號分隔的列表:累積,調用,調用者。如累計,來電者。
--minprocs=NUM 在supervisord進程成功啟動之前必須可用的OS進程槽的最小數量。
3.3 運行supervisorctl
要啟動supervisorctl,請運行$ BINDIR / supervisorctl。將顯示一個shell,使您可以控制當前由supervisord管理的進程。在提示符處輸入“help”以獲取有關支持的命令的信息。
如果supervisorctl在交互模式調用針對 supervisord需要驗證,你將被要求提供身份驗證憑據。
superviosrctl命令行選項
-c, --configuration
配置文件路徑(默認是/etc/supervisord.conf)
-h, --help 打印使用情況消息并退出
-i, --interactive
執行命令后啟動交互式shell
-s, --serverurl URL
supervisord服務器正在監聽的URL(默認“ http:// localhost:9001 ”)。
-u, --username 用于與服務器驗證的用戶名
-p, --password 用于與服務器進行身份驗證的密碼
-r, --history-file
保持readline歷史記錄(如果readline可用)
[root@node1 ~]# supervisorctl
foo RUNNING pid 2342, uptime 0:16:35
3.4 信號處理
該supervisord程序可以發送它的運行信號使得它執行特定操作。
可以將這些信號中的任何一個發送到單個supervisord進程標識,該進程ID可以在配置文件/etc/supervisord.conf中[supervisord]配置段中pidfile參數表示文件中找到
3.5 運行時安全
為supervisord允許在其配置文件中的任意路徑規范寫入數據。允許任意路徑選擇可能會造成符號鏈接***的漏洞。在配置中指定路徑時要小心。確保supervisord 配置文件不能被非特權用戶讀取或寫入,并且由超級用戶包安裝的所有文件都具有“健全”的文件權限保護設置。此外,請確保您的PYTHONPATH是健全的,并且所有Python標準庫文件都具有足夠的文件權限保護。
3.5 在啟動自動運行supervisord
創建開機啟動腳本文件/etc/init.d/superviosrd
[root@node1 ~]# vim /etc/init.d/supervisord
[root@node1 ~]# chmod u+x supervisord
[root@node1 ~]# chkconfig supervisord on (rehl6.5開機啟動設置)
[root@node1 ~]# systemctl enable supervisord (Centos 7.2開機啟動設置)
[root@node1 ~]# systemctl disable supervisord (關閉開機啟動)
開啟supervisord服務
[root@node1 ~]# systemctl start supervisord
重啟服務
[root@node1 ~]# systemctl restart supervisord
停止服務
[root@node1 ~]# systemctl stop supervisord
運行supervisorctl
啟動supervisorctl,執行supervisorctl,將顯示一個shell,使您可以控制supervisord管理的進程,在提示符輸入help以獲取相關支出的命令信息
如下:
[root@node1 ~]# supervisorctl
supervisor> help
default commands (type help ):
add clear fg open quit remove restart start stop update
avail exit maintail pid reload reread shutdown status tail version
3.6 啟動web訪問功能
修改相關配置文件開啟
[inet_http_server] ; inet (TCP) server disabled by default
port = :9999 ; (ip_address:port specifier,:port for all iface)
瀏覽器訪問方式如下:
http://IP:9999
四 supervisord配置文件詳解
參考鏈接:http://www.supervisord.org/configuration.html
4.1 superviosrd配置文件
Supervisor配置文件通常命名為 supervisord.conf。它由supervisord 和supervisorctl使用。如果任一應用程序在沒有-c選項的情況下啟動(用于顯式指示配置文件名的選項),應用程序將按照指定的順序在以下位置查找名為supervisord.conf的文件。它將使用它找到的第一個文件。
生成配置文件[root@node1 ~]# echo_supervisord_conf > /etc/supervisord.conf
4.2 配置文件格式
supervisord.conf是一個Windows-INI風格的(Python ConfigParser)文件。它包含部分(每個部分都用 [header]表示)和部分內的鍵/值對。下面介紹這些部分及其允許值。
4.3 環境變量
4.4 unix_http_server配置段
[unix_http_server]該配置段對于unix與套接字監聽http服務器的配置參數應插入。如果配置文件沒有[unix_http_server]部分,則unix域套接字http服務器將不會啟動
允許配置如下:
[unix_http_server]
file=/tmp/supervisor.sock ; (the path to the socket file)
;chmod=0700 ; socket file mode (default 0700)
;chown=nobody:nogroup ; socket file uid:gid owner
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))
注:
chmod 啟動時將unix套接字的unix權威模式位更改為此值。
默認700
chown 將套接字文件的用戶和組更改為此值,可能是unix用戶名或user:group
默認:使用啟動supervisord的用戶的用戶名和組
username 此http服務器驗證所需要的用戶名
默認:不需要用戶名
password 此http服務器驗證所需要的密碼,可以使名為密碼或者以{SHA}為前綴的sha-1哈希。
默認:不需要密碼
注意:散列的密碼必須是十六進制格式
4.5 inet_http_server配置段
;[inet_http_server] ; inet (TCP) server disabled by default
;port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface)
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))
4.5 supervisord配置段
[supervisord]
logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false ; (start in foreground if true;default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200)
;umask=022 ; (process file creation umask;default 022)
;user=chrism ; (default is current user, required if root)
;identifier=supervisor ; (supervisord identifier, default is 'supervisor')
;directory=/tmp ; (default is not to cd during start)
;nocleanup=true ; (don't clean up tempfiles at start;default false)
;childlogdir=/tmp ; ('AUTO' child log dir, default $TEMP)
;environment=KEY="value" ; (key value pairs to add to environment)
;strip_ansi=false ; (strip ansi escape codes in logs; def. false)
supervisord的全局設置[supervisord]
4.6 supervisorctl配置段
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris ; should be same as http_username if set
;password=123 ; should be same as http_password if set
;prompt=mysupervisor ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history ; use readline history if available
4.7 program:x配置段
配置文件必須包含一個或過個程序部,以便supervisord知道應該啟動和控制哪些程序,標題值是復合值,他是program,后接冒號,然后是程序名[program:foo]的標題是名為foo的程序。該名稱用戶控制作為配置結果長江的進程的客戶端應用程序中。創建沒有名稱的program段是錯誤的。該名稱不能包含冒號字符或括號字符。該名稱的值用作指定的%(program_name)s字符串表達式擴展的值
注意:一個[program:x]部分實際上代表了一個“同質過程組”到supervisord,組的成員有配置中的numpros和process_name參數的組合來定義。默認情況下,如果numproces和process_name保持其默認值不變。有[program:x]表示的組將命名為x,并且將有一個名為x的進程。者提供了一個向后兼容舊版本的超級管理員版本。它不會講程序部分視為同類進程組定義。
command=/usr/bin/cat
作用:改程序啟動時將運行的命令。該命令可以使絕對值也可以為相對值。如果是相對的則會自動搜索supervisor的環境$PATH以查找可執行文件。程序可以接收的參數,例如
4.7 [inet_http_server] 配置段
[inet_http_server]; inet (TCP) server disabled by default
port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface)
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))
port=127.0.0.1:8080
4.8 [eventlistener:theeventlistenername]實現supervisord對異常進程進行報警
詳細的Event特性請參考:http://supervisord.org/events.html
五 事件
5.1 事件監聽和通知
Supervisor為稱為“事件監聽器”的特殊編寫程序(它作為子進程運行)提供了一種訂閱“事件通知”的方法。事件通知、訂閱系統的目的是提供一種機制,用于滿足某些條件時運行任意代碼(例如:發送郵件,發送http請求)。這種情況通常與子進程狀態有關。可以根據superviosr重新啟動時通過電子郵件通知到某人。
事件通知協議是基于子進程’stdin’和’stdout’的通信。Supervisor將特殊格式的輸入發送到事件偵聽器進程的stdin,并期望來自事件偵聽器stdout的特殊格式的輸出,從而形成請求 - 響應周期。supervisord和監聽器的實現者之間達成一致的協議允許監聽器處理事件通知
5.2 配置事件監聽器
supervisord事件監聽器是在配置文件中[eventlistener:x]部分指定,除了Supervisor不遵守事件偵聽器進程的“捕獲模式”輸出外(即事件偵聽器不能是 PROCESS_COMMUNICATIONS_EVENT事件生成器),其與與supervisor [program:x] 部分幾乎完全相同。因此在eventlistener的配置段中指定stdout_capture_maxbytes或 stderr_capture_maxbytes是錯誤的。對可放置到配置文件中的eventlistener部分數量沒有任何人為約束。
當定義[eventlistener:x]部分時,它實際上定義了一個“池”,其中池中的事件偵聽器的數量由部分中的numprocs值決定。
5.3 事件通知協議
偵聽器在其stdin上發送一個”標題”行,該行組成是由一個空格彼此分開的一組冒號分隔的標記并以\n終止。
事件類型:
1 PROCESS_COMMUNICATION_STDOUT事件通知示例
processname:foo groupname:bar pid:123
這是標記之間發送的數據
事件監聽狀態
Name 描述
ACKNOWLEDGED 事件監聽器已確認(接受或拒絕)事件發送。
READY 事件通知可以發送到此事件偵聽器
BUSY 事件通知可能不會發送到此事件偵聽器。
5.4 配置supervisord監聽腳本
參考鏈接:
官網:http://www.supervisord.org/
附錄
附錄一 supervisord開機啟動腳本
[root@node1 ~]# vim /etc/init.d/supervisord
. /etc/rc.d/init.d/functions
prog="supervisord"
prefix="/usr/"
exec_prefix="${prefix}"
prog_bin="${exec_prefix}/bin/supervisord"
PIDFILE="/var/run/$prog.pid"
start()
{
echo -n $"Starting $prog: "
daemon $prog_bin --pidfile $PIDFILE
[ -f $PIDFILE ] && success $"$prog startup" || failure $"$prog startup"
echo
}
stop()
{
echo -n $"Shutting down $prog: "
[ -f $PIDFILE ] && killproc $prog || success $"$prog shutdown"
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $prog
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
;;
esac
附錄二 supervisord操作指南
基本語法
附錄三 supervisorctl操作指南
基本語法
Error
error1
Error: %(process_num) must be present within process_name when numprocs > 1
如果需要生成多個進程則需要在processname名稱中添加%(process_num)s標識.
應用
應用1 配置superisord管理httpd守護進程
[program:web_apache]
command=/usr/sbin/httpd -D FOREGROUND
autostart=true
autorestart=true
startsecs=3
user=root
應用2監控ningx服務進程
[program:web_nginx]
command=/usr/bin/nginx
autostart=true
autorestart=true
startsecs=3
user=root
process_name=%(programname)s%(process_num)s
numprocs=4
查看監控詳情
在nginx配置主配置文件中加入以下內容,禁止nginx以守護進程運行
[root@node1 ~]# vim /usr/local/nginx/conf/nginx.conf
daemon off
測試效果:
啟動supervisord守護進程通過web監控頁面瀏覽
應用3 supervisord實現進程異常告警
參考鏈接: http://talk.withme.me/?p=318
利用Supervisord進行進程監控和報警主要的利用Supervisord的Event特性,編寫一個listener,監控進程狀態的改變,然后執行指定的代碼。
應用4 supervisord實現對php-fpm的控制
修改supervisord的相關配置文件/etc/supervisord.conf
[include]
files=/etc/supervisord.d/*.ini
配置文件/etc/supervisord.d/
/etc/supervisord.d/ php_fpm.ini
將如下內容添加到相關配置文件中
[program:db_php-fpm]
command=/usr/sbin/php-fpm
autostart=true
autorestart=true
startsecs=3
user=root
process_name=%(programname)s%(process_num)s
應用5 supervisord實現對mysql進程服務的控制
同上將以下內容追加到配置文件中
[root@localhost fonts]#vim /etc/supervisord.d/mysqld.server.ini
;mysql服務配置端
[program:db_mysqld]
command=/usr/sbin/mysqld
autostart=true
autorestart=true
startsecs=3
user=root
process_name=%(programname)s%(process_num)s
總結
以上是生活随笔為你收集整理的linux服务与进程管理sup,linux下进程管理工具-supervisord的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 教程 | 如何优雅而高效地使用Matpl
- 下一篇: html宽度自动填充,html – 创建