天天看点

supervisor系列:2、运行supervisorsupervisor系列:2、运行supervisor

supervisor系列:2、运行supervisor

文章目录

  • supervisor系列:2、运行supervisor
    • 1. 添加一个程序
    • 2. 运行supervisord
      • 2.1 supervisord命令行配置
    • 3. 运行supervisorctl
      • 3.1 supervisorctl命令行配置
      • 3.2 supervisorctl动作
    • 4. 信号
      • 4.1 信号句柄
    • 5. 运行时安全策略
    • 6. 在开机时自动运行supervisord

本节在解释如何运行 supervisord和 supervisorctl命令时引用

BINDIR

。这是Python安装配置的" bindir "目录。例如,通过

./configure ——prefix=/usr/local/py; make; make install

的python安装时,

BINDIR

应该是

/usr/local/py/bin

。不同平台上的Python解释器使用不同的

BINDIR

。如果你不知道

setup.py install

的输出在哪里,请查看它。

1. 添加一个程序

在supervisord将为您做任何有用的事情之前,您需要在其配置中添加至少一个

program

段。

program

段将定义在调用supervised命令时运行和管理的程序。要添加程序,您需要编辑

supervisord.conf

文件。

要运行的最简单的程序之一是UNIX cat程序。下面显示的

program

段将在启动supervisord进程时运行

cat

[program:foo]
command=/bin/cat
           

这个节可以剪切并粘贴到

supervisord.conf

文件中。这是最简单的程序配置,因为它只命名一个命令。程序配置部分有许多其他配置选项,这里没有显示。更多信息请参见[program:x]设置部分。

2. 运行supervisord

要运行supervisord,运行

$BINDIR/supervisord

。生成的进程将自己守护并与终端分离。它将操作日志默认保存在

$CWD/supervisor.log

你可以在前台通过在命令行中传递

-n

标志来启动supervisord可执行文件。这对于调试启动问题很有用。

警告:

当supervisord启动时,它将在默认位置(包括当前工作目录)中搜索配置文件。如果您具有安全意识,您可能希望在指定配置文件绝对路径的supervisord命令后指定一个" -c "参数,以确保某人不会欺骗您从包含流氓的

supervisord.conf

文件的目录中运行supervisor。当不带

-c

参数的supervisor作为root启动时,会发出一个警告。

如果要改变supervisord控制的程序集,请编辑

supervisor.conf

文件并

kill -HUP

或重启supervisord程序。这个文件有几个示例程序定义。

supervised命令接受许多命令行选项。这些命令行选项中的每一个都覆盖配置文件中的任何等价值。

2.1 supervisord命令行配置

-c FILE, --configuration=FILE supervisord配置文件的路径
-n, --nodaemon 前台运行supervisord
-s, --silent 没有指向stdout(标准输出)的输出
-h, --help 显示supervisord的帮助信息
-u USER, --user=USER UNIX用户名或数字用户id。如果supervisor是以root用户启动的,请在启动过程中尽快将setuid设置为这个用户
-m OCTAL, --umask=OCTAL 表示umask的八进制数字(例如022),supervisord启动后应该使用它。
-d PATH, --directory=PATH 当supervisord作为守护进程运行时,在守护进程之前cd到这个目录。
-l FILE, --logfile=FILE 用作supervisord活动日志的文件名路径。
-y BYTES, --logfile_maxbytes=BYTES 在循环发生之前,supervisor活动日志文件的最大大小。该值是后缀的乘积,例如“1”是一个字节,“1MB”是1兆字节,“1GB”是1g字节。
-z NUM, --logfile_backups=NUM 要保留的supervisord活动日志的备份副本数量。每个日志文件的大小为

logfile_maxbytes

-e LEVEL, --loglevel=LEVEL supervisor应该写入活动日志的日志级别。有效的级别是

trace

debug

info

warn

error

critical

-j FILE, --pidfile=FILE supervisord应该写入pid文件的文件名。
-i STRING, --identifier=STRING 由各种客户端ui为这个supervisor程序实例公开的任意字符串标识符。
-q PATH, --childlogdir=PATH 一个目录的路径(它必须已经存在),supervisor将在其中写入其

AUTO

模式的子进程日志。
-k, --nocleanup 防止supervisord在启动时执行清理(删除旧的

AUTO

进程日志文件)。
-a NUM, --minfds=NUM 在supervisord成功启动之前必须可用的文件描述符的最小数目。
-t, --strip_ansi 从所有子日志进程中剥离ANSI转义序列。
-v, --version 将supervisord版本号打印到stdout并退出。
–profile_options=LIST 用于分析的逗号分隔选项列表。使supervisord在profiler下运行,并根据选项输出结果,选项是以下逗号分隔的列表:

cumulative

calls

callers

。如

cumulative,callers

–minprocs=NUM 在supervisord进程成功启动之前,可用的OS进程槽的最小数目

3. 运行supervisorctl

执行

$BINDIR/supervisorctl

命令启动supervisorctl。您将看到一个shell,它将允许您控制当前由supervisord管理的进程。在提示符处键入“help”以获得所支持的命令的相关信息。

当使用命令行参数调用时,可以使用“一次性”命令调用supervisorctl可执行文件。例如:

supervisorctl stop all

。如果命令行中有参数,它将阻止交互shell被调用。相反,该命令将被执行,并且supervisorctl将退出,其代码为0表示成功或运行,非0表示错误。举个例子:

supervisorctl status all

将返回非零,如果任何单个进程没有运行的话。

如果在交互式模式下对需要身份验证的supervisord调用supervisorctl,您将被要求身份验证凭据。

3.1 supervisorctl命令行配置

-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可用)

action [arguments]

action是像“tail”或“stop”这样的命令。如果在命令行中指定了-i或没有指定操作,将启动一个解释交互键入的操作的“shell”。使用action“help”来找出可用的action。

3.2 supervisorctl动作

help

打印可用操作的列表

help <action>

打印<action>帮助

add <name> […]

激活进程/组配置中的任何更新

remove <name> […]

从活动配置中删除进程/组

update

Reload config and add/remove as necessary, and will restart affected programs

update all

根据需要重新加载config和add/remove,将重新启动受影响的程序

update <gname> […]

更新特定的组,将重启受影响的程序

clear <name>

清除进程的日志文件。

clear <name> <name>

清除多个进程的日志文件

clear all

清除所有进程日志文件

fg <process>

在前台模式下连接进程按Ctrl+C退出前台

pid

得到supervisord的PID。

pid <name>

通过名称获取单个子进程的PID。

pid all

获取每个子进程的PID,每行一个。

reload

重启远程supervisord

reread

重新加载守护进程的配置文件,不需要添加/删除(不需要重启)

restart <name>

重启进程注意:重启不会重新读取配置文件。关于这一点,请参阅重读和更新。

restart <gname>:*

重启组内所有进程注意:重启不会重新读取配置文件。关于这一点,请参阅重读和更新。

restart <name> <name>

重启多个进程或组注意:重启不会重新读取配置文件。关于这一点,请参阅重读和更新。

restart all

重启所有进程注意:Restart不会重新读取配置文件。关于这一点,请参阅重读和更新。

signal

没有信号帮助

start <name>

启动进程

start <gname>:*

启动组中的所有进程

start <name> <name>

启动多个进程或组

start all

开始所有进程

status

获取所有进程状态信息。

status <name>

通过名称获取单个进程的状态。

status <name> <name>

获取多个命名进程的状态。

stop <name>

停止一个进程

stop <gname>:*

停止组中的所有进程

stop <name> <name>

停止多个进程或组

stop all

停止所有进程

tail [-f] <name> [stdout|stderr] (default stdout)

输出进程日志的最后一部分

例如:

tail -f <name> 命名进程stdout的连续尾部按Ctrl-C退出。

tail -100 <name> 进程stdout的最后100 字节

tail <name> stderr 进程stderr的最后1600 字节

4. 信号

supervisord程序可能会被发送信号,使其在运行时执行某些操作。

您可以将这些信号中的任何一个发送到单个supervisord进程id。这个进程id可以在配置文件的

[supervisord]

部分的

pidfile

参数所表示的文件中找到(默认为

$CWD/supervisord.pid

)。

4.1 信号句柄

SIGTERM

supervisord 和所有的子进程都会关闭。这可能需要几秒钟。

SIGINT

supervisord 和所有的子进程都会关闭。这可能需要几秒钟。

SIGQUIT

supervisord 和所有的子进程都会关闭。这可能需要几秒钟。

SIGHUP

supervisord 将停止所有进程,从找到的第一个配置文件重新加载配置,并启动所有进程。

SIGUSR2

supervisord 将关闭并重新打开主活动日志和所有子日志文件。

5. 运行时安全策略

开发人员已经尽了最大努力来确保使用作为root运行的supervisord进程不会导致意外的特权升级。但购者自慎。Supervisor不像DJ Bernstein的daemontools那样偏执,因为Supervisord允许在配置文件中任意指定写入数据的路径。允许任意的路径选择可能会导致符号链接攻击的漏洞。在配置中指定路径时要小心。确保没有特权的用户不能读取或写入supervisord配置文件,并且supervisor包安装的所有文件都有“健全的”文件权限保护设置。此外,确保您的

PYTHONPATH

是正常的,并且所有Python标准库文件都有足够的文件权限保护。

6. 在开机时自动运行supervisord

如果您使用的是发行版打包的Supervisor版本,那么它应该已经集成到发行版的服务管理基础结构中。

以下是用户为各种操作系统提供的脚本:https://github.com/Supervisor/initscripts

如果你卡住了,这里有一些Serverfault的答案: How to automatically start supervisord on Linux (Ubuntu)

继续阅读