Django项目部署

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 项目的静态文件

  1. 首先在 Django 项目的 settings.py 文件中添加如下内容:
STATIC_ROOT = os.path.join(BASE_DIR,"allstatic")
  1. 再在项目的主目录下执行如下命令:

记得要切换到项目的虚拟环境下执行

python3 manage.py collectstatic

执行完这个命令,Django 会搜集项目中所有的静态文件,并将其拷贝到 STATIC_ROOT 指定的目录下。

  1. 再在项目的配置文件settings.py中,注释以下内容
#STATICFILES_DIRS = [
#    os.path.join(BASE_DIR, 'static'),
#]

处理完毕项目的静态文件之后, 就可以让后面提到的 uwsgi 或者 nginx 中的任何一个很方便的使用了

Uwsgi 处理 socket 连接

安装
pip3 install uwsgi
测试

第一种:以命令行方式进程运行测试

在项目的主目录下执行如下命令

uwsgi --http  :8000   --module   SharkAPAMP.wsgi

图例示范:

image.png

此时在浏览器中输入主机的 IP 和端口进行访问

image.png

关于静态文件找不到的问题,我们在稍后的 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.

注意:假如 nginxuwsgi 不在同一台机器上,监听地址应该修改为 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

启动时配置文件的默认查找顺序

  1. $CWD/supervisord.conf
  2. $CWD/etc/supervisord.conf
  3. /etc/supervisord.conf
  4. /etc/supervisor/supervisord.conf (在 Supervisor 3.3.0 中及更改版本)
  5. ../etc/supervisord.conf (相对于被管理程序的可执行文件)
  6. ../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进程槽的最小数量。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351