https://www.jianshu.com/p/25da7379b0b1
快速部署一个 python 的 Djanog 程序
virtualenvwrapper 部署项目的虚拟环境
安装
pip3 install virtualenvwrapper
配置环境变量
为单个用户添加环境变量信息
编辑用户家目录下的 .bashrc
文件
# 设置虚拟环境使用的 python 解释器
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3
# 设置创建虚拟环境放置的目录
export WORKON_HOME=$HOME/.virtualenv
# 虚拟环境的初始化脚本
source /usr/local/bin/virtualenvwrapper.sh
使其生效
source ~/.bashrc
为项目新建虚拟环境
mkvirtualenv cmdb
进入虚拟环境
workon cmdb
安装项目的依赖包
从项目中的 requirments.txt
安装项目的依赖环境包
可以通过 pip3 freeze > requirements.txt
将在本地(开发环境)的虚拟环境下安装的包的信息导出来。
之后放在项目的根目录下,以便随着项目代码一起传到生产环境中。
在生产服务器的 python 虚拟环境下
安装项目的依赖包
(cmdb) [root@master SharkAPAMP]# pip3 install -r requirements.txt
处理 Django 项目的静态文件
- 首先在 Django 项目的
settings.py
文件中添加如下内容:
STATIC_ROOT = os.path.join(BASE_DIR,"allstatic")
- 再在项目的主目录下执行如下命令:
记得要切换到项目的虚拟环境下执行
python3 manage.py collectstatic
执行完这个命令,Django 会搜集项目中所有的静态文件,并将其拷贝到 STATIC_ROOT
指定的目录下。
- 再在项目的配置文件
settings.py
中,注释以下内容
#STATICFILES_DIRS = [
# os.path.join(BASE_DIR, 'static'),
#]
处理完毕项目的静态文件之后, 就可以让后面提到的 uwsgi
或者 nginx
中的任何一个很方便的使用了
Uwsgi 处理 socket 连接
安装
pip3 install uwsgi
测试
第一种:以命令行方式进程运行测试
在项目的主目录下执行如下命令
uwsgi --http :8000 --module SharkAPAMP.wsgi
图例示范:
此时在浏览器中输入主机的 IP 和端口进行访问
关于静态文件找不到的问题,我们在稍后的 Nginx 配置中解决。
当然,假如不使用 Nginx 的话, Uwsgi 自己也能解决:
执行如下命令即可:
uwsgi --http :8000 \
--chdir /cmdb/SharkAPAMP \
--module SharkAPAMP.wsgi \
--master --processes 4 \
--static-map /static=/cmdb/SharkAPAMP/allstatic # 映射静态文件
第二种:以配置文件的方式启动 uwsgi
在项目的主目录下的 conf
文件夹下编辑文件 qf_uwsgi.ini
[uwsgi]
# 切换到工作目录
chdir = /cmdb/SharkAPAMP
#socket = 127.0.0.1:8000 # nginx 连接时使用
http = 127.0.0.1:8000 # 浏览器连接时使用
#static-map = /static=/cmdb/SharkAPAMP/allstatic
module = SharkAPAMP.wsgi
master = true
processes = 6
# clear environment on exit
vacuum = true
# 虚拟环境路径,按自己项目的虚拟环境路径填写,不要照抄!!!
virtualenv = /root/virtualenv/cmdb
logto = /tmp/qfedu.log
启动测试
uwsgi --ini 你的这个ini文件的具体路径/qf_uwsgi.ini
示例:
(cmdb) [root@master SharkAPAMP]# uwsgi --ini conf/qf_uwsgi.ini
[uWSGI] getting INI configuration from conf/qf_uwsgi.ini
[uwsgi-static] added mapping for /static => /cmdb/SharkAPAMP/allstatic
之后在浏览器里访问,看是否可以看到正常的网页
扩展(alpine 系统)
Bonus: 多版本 Python 使用同一个 uWSGI 二进制文件
正如我们已经看到的,uWSGI 由一个很小的核心和许多插件组成。插件可以被嵌入到二进制文件中 或者动态加载。当你为 Python 构建 uWSGI 的时候,许多插件包括 Python 在内的插件都被嵌入到了最终的二进制文件中。
当你使用多个 Python 版本但是没有为每一个版本构建一个二进制文件时这可能会造成问题。
最好的方法可能是弄一个没有内置语言特性的小二进制文件,然后每个 Python 版本有一个 插件,可以动态地加载。
在 uWSGI 的源代码目录中:
make PROFILE=nolang
这将会构建一个包含除了 Python 之外的所有默认内置插件的 uwsgi 二进制文件。
现在,在相同的目录下,我们开始构建 Python 插件:
PYTHON=python3.4 ./uwsgi --build-plugin "plugins/python python34"
PYTHON=python2.7 ./uwsgi --build-plugin "plugins/python python27"
PYTHON=python2.6 ./uwsgi --build-plugin "plugins/python python26"
你最后会得到这些文件: python34_plugin.so
, python27_plugin.so
, python26_plugin.so
。复制 这些文件到你的目录中。(uWSGI 默认在当前的工作目录中搜索插件。)
现在你只需要在你的配置文件中(在文件最上面)简单加上 plugins-dir 和 plugin 选项就可以了。
[uwsgi]
plugins-dir = <path_to_your_plugin_directory>
plugin = python26
这将会从你复制插件到的那个目录中加载 python26_plugin.so
插件。
Nginx 代理
可以利用Nginx做反向代理、负载均衡以及处理静态文件。
添加Nginx存储库
要添加CentOS 7 EPEL存储库,请打开终端并使用以下命令:
sudo yum install epel-release
安装Nginx
现在Nginx存储库已安装在您的服务器上,请使用以下yum
命令安装Nginx :
sudo yum install nginx
配置 Nginx
可以在项目的主目录下新建一个 nginx 的配置文件:qf_cmdb_nginx.conf
# the upstream component nginx needs to connect to
upstream django {
# server unix:///path/to/your/mysite/mysite.sock; # for a file socket
# Django 的地址和端口
server 127.0.0.1:8000; # for a web port socket (we'll use this first)
}
# configuration of the server
server {
# nginx 主机的监听端口
listen 80;
# nginx 主机的域名
server_name 你的ip地址 或者 FQDN ;
charset utf-8;
# max upload size
client_max_body_size 75M; # adjust to taste
# Django 的静态文件
location /static {
alias /cmdb/SharkAPAMP/allstatic; # 指向django的static目录
}
# 最后将非静态资源的请求都转发个 Django
location / {
uwsgi_pass django; # django 和 upstream django 对应
include uwsgi_params; # the uwsgi_params file you installed
}
}
建立此配置文件到 nginx 的子配置文件的软链接
ln -s /opt/auto_cmdb/conf/qf_cmdb_nginx.conf \
/etc/nginx/conf.d/
启动Nginx
systemctl start nginx
如果您正在运行防火墙,请运行以下命令以允许HTTP和HTTPS流量:
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
修改 Uwsgi 的配置文件
当 Nginx 作为反向代理,连接到 web app 的 uwsgl 时,需要修改 uwsgi 的监听方式为 socket
.
注意:假如
nginx
和uwsgi
不在同一台机器上,监听地址应该修改为uwsgi
自己本机的 IP 地址。
[uwsgi]
# 切换到工作目录
chdir = /opt/auto_cmdb/
socket = 127.0.0.1:8000
module = auto_cmdb.wsgi
master = true
processes = 6
# clear environment on eixt
vacuum = true
logto = /tmp/qfedu.log
再次启动 uwsgi
uwsgi --ini conf
此时就可以在浏览器中输入 nginx 服务器的 ip和端口 访问网站了
Supervisor
安装
pip3 install supervisor
supervisor 配置文件
获取基本的默认配置文件
echo_supervisord_conf > /opt/auto_cmdb/supervisor/supervisord.conf
编辑生成的配置文件 supervisord.conf
在此文件最后的位置,添加如下内容, 用于设置哪些子配置文件可以被包含进来
[include]
files = conf/*.ini
注意: 这里的路径是相对于主配置文件
supervisord.conf
所在的目录的。
接着创建子配置文件 conf/supervisor_auto_cmdb.ini
[program:auto-cmdb]
directory=/opt/auto_cmdb
command=uwsgi --ini conf/auto_cmdb.ini
priority=999
autostart=true
autorestart=true
startsecs=10
startretries=3
exitcodes=0,2
stopsignal=QUIT
stopwaitsecs=1
;user=root
log_stdout=true
log_stderr=false
logfile=/opt/auto_cmdb/logs/auto_cmdb.log
logfile_maxbytes=1MB
logfile_backups=10
子配置文件的各个参数含义参考如下介绍:
[program:auto_cmdb]
;执行的命令
command=uwsgi的可执行文件目录/uwsgi uwsgi 配置文件目录/qf_uwsgi.ini
priority=999 ; 优先级(越小越优先)
autostart=true ; supervisord启动时,该程序也启动
autorestart=true ; 异常退出时,自动启动
startsecs=10 ; 启动后持续10s后未发生异常,才表示启动成功
startretries=3 ; 异常后,自动重启次数
exitcodes=0,2 ; exit异常抛出的是0、2时才认为是异常
stopsignal=QUIT ; 杀进程的信号
; 在程序发送stopignal后,等待操作系统将SIGCHLD返回给supervisord的秒数。
; 如果在supervisord从进程接收到SIGCHLD之前经过了这个秒数,
; supervisord将尝试用最终的SIGKILL杀死它
stopwaitsecs=1
user=root ; 设置启动该程序的用户
log_stdout=true ; 如果为True,则记录程序日志
log_stderr=false ; 如果为True,则记录程序错误日志
logfile=/opt/auto_cmdb/logs/auto_cmdb.log ; 程序日志路径
logfile_maxbytes=1MB ; 日志文件最大大小
logfile_backups=10 ; 日志文件最大数量
启动
supervisord -c /etc/supervisord.conf
检查
[root@0befd7318a6e auto_cmdb]# supervisorctl
auto-cmdb RUNNING pid 1486, uptime 0:56:21
qfcmdb RUNNING pid 1487, uptime 0:56:21
supervisor> status all
auto-cmdb RUNNING pid 1486, uptime 0:56:33
qfcmdb RUNNING pid 1487, uptime 0:56:33
supervisor> stop qfcmdd
qfcmdd: ERROR (no such process)
supervisor> stop qfcmdb
qfcmdb: stopped
supervisor> start qfcmdb
qfcmdb: started
supervisor> reload
Really restart the remote supervisord process y/N? y
Restarted supervisord
supervisor>
Supervisor
简单介绍
目前不支持 python3
允许用户在类UNIX操作系统上控制大量进程。
官方文档:
http://supervisord.org/configuration.html
安装
下载源码
下载地址:
https://pypi.org/project/supervisor/#files
curl -o supervisor.tar.gz \
https://files.pythonhosted.org/packages/44/60/698e54b4a4a9b956b2d709b4b7b676119c833d811d53ee2500f1b5e96dc3/supervisor-3.3.4.tar.gz
使用 python
安装源码包的方式安装
tar -xf supervisor.tar.gz
cd supervisor-3.3.4
python setup.py install
supervisor组件介绍
supervisord
supervisord是supervisor的服务端程序。
工作职责:启动supervisor程序自身,启动supervisor管理的子进程,响应来自clients的请求,重启闪退或异常退出的子进程,把子进程的stderr或stdout记录到日志文件中,生成和处理Event
supervisorctl
这东西还是有点用的,如果说supervisord是supervisor的服务端程序,那么supervisorctl就是client端程序了。supervisorctl有一个类型shell的命令行界面,我们可以利用它来查看子进程状态,启动/停止/重启子进程,获取running子进程的列表等等。。。最牛逼的一点是,supervisorctl不仅可以连接到本机上的supervisord,还可以连接到远程的supervisord,当然在本机上面是通过UNIX socket连接的,远程是通过TCP socket连接的。supervisorctl和supervisord之间的通信,是通过xml_rpc完成的。 相应的配置在[supervisorctl]块里面
web Server
Web Server主要可以在界面上管理进程,Web Server其实是通过XML_RPC来实现的,可以向supervisor请求数据,也可以控制supervisor及子进程。配置在[inet_http_server]块里面
XML_RPC接口
这个就是远程调用的,上面的supervisorctl和Web Server就是它弄的
supervisor 的基本使用
添加需要管理的程序
要想使用 supervisor
, 在配置文件中,至少需要在其配置中添加一个program
部分。
要添加程序,您需要编辑supervisord.conf
文件。
示例:
supervisord.conf
文件部分内容:
[program:foo]
command=/bin/cat
运行 supervisord
supervisord # 使用默认的配置文件启动
supervisord -c /etc/supervisord.conf # 指定配置文件启动
以上启动的方法,会以后台守护进程方式启动。
假如想调试的话,添加 -n
参数,以非守护进程方式运行,也就是在前台运行。
supervisord -c /etc/supervisord.conf -n
supervisord命令接受多个命令行选项。这些命令行选项中的每一个都会覆盖配置文件中的任何等效值。
更多的命令选项见附表 [1](### supervisord命令行选项)
supervisorctl 管理进程
运行 supervisorctl
命令,可以进入一个shell,使您可以控制当前由supervisord管理的进程。在提示符处输入“help”以获取有关支持的命令的信息。
[root@master ~]# supervisorctl
foo RUNNING pid 12581, uptime 0:11:08
supervisor> status all # 查看所管理的所有进程的状态
foo RUNNING pid 12581, uptime 0:12:54
supervisor> stop foo # 停止
foo: stopped
supervisor> start foo # 启动
foo: started
supervisor>exit # 退出
当然也支持命令行传参的放式,以执行一次性的命令任务
[root@master ~]# supervisorctl status foo
foo RUNNING pid 12870, uptime 0:03:22
[root@master ~]# supervisorctl stop foo
foo: stopped
[root@master ~]# supervisorctl status foo
foo STOPPED Jun 04 06:47 PM
[root@master ~]# supervisorctl start foo
foo: started
[root@master ~]#
配置文件
生成默认的配置文件
echo_supervisord_conf > /etc/supervisord.conf
启动时配置文件的默认查找顺序
$CWD/supervisord.conf
$CWD/etc/supervisord.conf
/etc/supervisord.conf
-
/etc/supervisor/supervisord.conf
(在 Supervisor 3.3.0 中及更改版本) -
../etc/supervisord.conf
(相对于被管理程序的可执行文件) -
../supervisord.conf
(相对于被管理程序的可执行文件)
文件格式
supervisord.conf
是一个Windows-INI风格的(Python ConfigParser)文件。它包含部分(每个部分都用[header]
表示)和部分内的键/值对。
下面介绍这些部分及其允许值。
环境变量
配置文件中的环境变量使用的是 python 风格的 %(name)s
[program:example]
command=/usr/bin/example --loglevel=%(ENV_LOGLEVEL)s
配置文件详解
[unix_http_server]
; socket文件的路径,supervisorctl用XML_RPC和supervisord通信就是
; 通过它进行的。如果不设置的话,supervisorctl也就不能用了
file=/tmp/supervisor.sock
; 启动时将UNIX域套接字的UNIX权限模式位更改为此值。
; 默认为0700。 非必须设置
;chmod=0700
; 将套接字文件的用户和组更改为此值。
; 默认为启动supervisord进程的用户及属组。非必须设置
;chown=nobody:nogroup
; 此HTTP服务器验证所需的用户名
; 默认为不需要用户。 非必须设置
;username=user
; 此HTTP服务器验证所需的密码,可以是明文,也可以是哈希值
; 如:{SHA}82ab876d1387bfafe46cc1c8a2ef074eae50cb1d
; 请注意,散列的密码必须是十六进制格式。
; 默认:不需要密码, 非必须设置
;password=123
; 侦听在TCP上的socket,Web Server和远程的supervisorctl都要用到
; 不设置的话,默认为不开启。非必须设置
;[inet_http_server]
; 监控程序将侦听HTTP / XML-RPC请求的TCP主机端口值
;(例如127.0.0.1:9001)
; supervisorctl将使用XML-RPC 通过此端口与supervisord进行通信 。
; 要监听机器中的所有接口,请使用:9001或*:9001。
; 没有默认值, 只要 [inet_http_server] 开启了,就不许设置此项
;port=127.0.0.1:9001
; 下面两个和上面的uinx_http_server一个样。非必须设置
;username=user
;password=123
; 这个部分主要是定义supervisord这个服务端进程的一些参数的
; 这个必须设置,不设置,supervisor 就不用干活了
[supervisord]
; 这个是supervisord这个主进程的日志路径,注意和子进程的日志没关系。
; 默认路径$CWD/supervisord.log,非必须设置
logfile=/tmp/supervisord.log
; 这个是上面那个日志文件的最大的大小,当超过50M的时候,会进行切割
; 当设置为0时,表示不限制文件大小
; 默认值是50M,非必须设置。
logfile_maxbytes=50MB
; 日志文件保持的数量,上面的日志文件大于50M时,就会生成一个新文件
; 日志文件数量大于10时,最初的老文件被新文件覆盖,文件数量将保持为10
; 当设置为0时,表示不限制文件的数量
; 默认情况下为10,非必须设置
logfile_backups=10
; 日志级别,有critical, error, warn, info, debug, trace, or blather
; 请注意,在日志级别的 debug 中,supervisord日志文件将记录其子进程的
; stderr / stdout输出和关于进程状态更改的扩展信息信息,
; 这对于调试无法正常启动的进程很有用。
; 默认为info,非必须设置项
loglevel=info
; supervisord的pid文件路径
; 默认为$CWD/supervisord.pid,非必须设置
pidfile=/tmp/supervisord.pid
; 如果是true,supervisord进程将在前台运行
; 默认为false,也就是后台以守护进程运行,非必须设置
nodaemon=false
; 这个是最少系统空闲的文件描述符,低于这个值supervisor将不会启动。
; 查看系统的文件描述符 cat /proc/sys/fs/file-max
; 默认情况下为1024,非必须设置
minfds=1024
; 最小可用的进程描述符,低于这个值supervisor也将不会正常启动。
; ulimit -u这个命令,可以查看linux下面用户的最大进程数
; 默认为200,非必须设置
minprocs=200
; 进程创建文件的掩码
; 默认为022,非必须设置项
;umask=022
; 这个参数可以设置一个非root用户,当我们以root用户启动supervisord之后,
; 当进行一些关键有意义的操作时候,会切换到此用户
; 我这里面设置的这个用户,也可以对supervisord进行管理
; 默认情况是不设置,非必须设置项
;user=chrism
; 这个参数是supervisord的标识符,主要是给XML_RPC用的。
; 当你有多个 supervisor的时候,而且想调用XML_RPC统一管理,
; 就需要为每个supervisor设置不同的标识符了
; 默认是supervisord。。。非必需设置
;identifier=supervisor
; 这个参数是当supervisord作为守护进程运行的时候,设置这个参数的话,
; 启动 supervisord 进程之前,会先切换到这个目录
; 默认不设置。。。非必须设置
;directory=/tmp
; 这个参数当为false的时候,会在supervisord进程启动的时候,
; 把以前子进程产生的日志文件(路径为AUTO的情况下)清除掉。
; 有时候咱们想要看历史日志,当然不想日志被清除了。
; 所以可以设置为 true
; 默认是false,有调试需求时可以设置为true非必须设置
;nocleanup=true
; 当子进程日志路径为AUTO的时候,子进程日志文件的存放路径。
;childlogdir=/tmp
; 这个是用来设置环境变量的,supervisord在linux中启动默认继承了
; linux的环境变量,在这里可以设置supervisord进程特有的其他环境变量。
; supervisord启动子进程时,子进程会拷贝父进程的内存空间内容。
; 所以设置的这些环境变量也会被子进程继承。
; 小例子:environment=name="haha",age="hehe"
; 默认为不设置, 非必须设置
;environment=KEY="value"
; 这个选项如果设置为true,会清除子进程日志中的所有ANSI 序列。
; 什么是ANSI序列呢?就是我们的\n,\t这些东西。
; 默认为false。。。非必须设置
;strip_ansi=false
; 这个选项是给XML_RPC用的,当然你如果想使用supervisord
; 或者web server 这个选项必须要开启的
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
;下面的部分主要是针对supervisorctl的一些配置
[supervisorctl]
; 这个是supervisorctl本地连接supervisord的时候,
; 本地UNIX socket 路径,注意这个是和前面的[unix_http_server]对应的。
; 默认值就是unix:///tmp/supervisor.sock, 非必须设置
serverurl=unix:///tmp/supervisor.sock
; 这个是supervisorctl远程连接supervisord的时候,
; 用到的TCP socket路径。
; 注意这个和前面的[inet_http_server]对应。
; 默认就是http://127.0.0.1:9001, 非必须项
;serverurl=http://127.0.0.1:9001
; 用户名和密码
; 默认空, 非必须设置
;username=chris
;password=123
; 输入用户名密码时候的提示符
; 默认supervisor。。非必须设置
;prompt=mysupervisor
; 这个参数和shell中的history类似,我们可以用上下键来查找前面执行过的命令
; 默认是no file的, 所以我们想要有这种功能,必须指定一个文件,
; 非必须设置
;history_file=~/.sc_history
; 这个就是要管理的子进程了,":"后面的是名字,最好别乱写和实际进程
; 有点关联最好。
; 这样的program我们可以设置一个或多个,
; 一个program就是要被管理的一个进程
;[program:theprogramname]
; 这个就是我们的要启动进程的命令路径了,可以带参数
; 例子:/home/test.py -a 'hehe'
; 有一点需要注意的是,我们的command只能是那种运行与前台的进程,
; 不能是守护进程。这个想想也知道了,比如说:
; command=systemctl start httpd。
; httpd这个进程被linux的systemed管理了,我们的supervisor再去启动这个命令
这已经不是严格意义的子进程了。
这个是个必须设置的项
;command=/bin/cat
[program:qfcmdb]
;执行的命令
command=/root/virtualenv/cmdb/bin/uwsgi /cmdb/SharkAPAMP/conf/qf_uwsgi.ini
priority=999 ; 优先级(越小越优先)
autostart=true ; supervisord启动时,该程序也启动
autorestart=true ; 异常退出时,自动启动
startsecs=10 ; 启动后持续10s后未发生异常,才表示启动成功
startretries=3 ; 异常后,自动重启次数
exitcodes=0,2 ; exit异常抛出的是0、2时才认为是异常
stopsignal=QUIT ; 杀进程的信号
; 在程序发送stopignal后,等待操作系统将SIGCHLD返回给supervisord的秒数。
; 如果在supervisord从进程接收到SIGCHLD之前经过了这个秒数,
; supervisord将尝试用最终的SIGKILL杀死它
stopwaitsecs=1
user=root ; 设置启动该程序的用户
log_stdout=true ; 如果为True,则记录程序日志
log_stderr=false ; 如果为True,则记录程序错误日志
logfile=/var/log/qf_cmdb.log ; 程序日志路径
logfile_maxbytes=1MB ; 日志文件最大大小
logfile_backups=10 ; 日志文件最大数量
[include]
files = relative/directory/*.ini
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可用) |
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 | |
supervisord应写入活动日志的日志记录级别。有效的级别是跟踪 ,调试 ,信息 ,警告 , 错误 和关键 。 |
|
-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进程槽的最小数量。 |