日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux服务与进程管理sup,linux下进程管理工具-supervisord

發布時間:2025/3/15 linux 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。