*、配置说明地址:
http://supervisord.org/configuration.html#program-x-section-settings
*supervisor主要功能说明:
a、可以监控进程是否死掉,自动重启
b、可以管理进程的启动,停止
c、可以对进程输出的日志进行管理,备份(自动重启)
*、安装supervisor插件
把supervisord.conf拷贝到/etc/supervisor
*、创建配置文件目录
mkdir -p /etc/supervisor/conf.d/
*、supervisord.conf 里面加入程序配置段,配置脚本启动
[include] #把每个应用的文件包含进来,后续好扩展
files = /etc/supervisor/conf.d/*.conf
编辑一份配置文件
vim /etc/supervisor/conf.d/test.conf
[program:test]
directory = python test.py ; 程序的启动目录
command = /var/www/test/ ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = leon ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /var/log/test/test.log ; 需要手动创建
; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere
*、服务端管理
a、启动服务端
/usr/local/python27/bin/supervisord -c /etc/supervisor/supervisord.conf
b、关掉服务端
/usr/local/python27/bin/supervisorctl shutdown
c、重启某一个被管理的进程 xxx 为supervisor配置的进程说明
/usr/local/python/bin/supervisorctl restart xxx
d、登入supervisor命令管理
[test@server1 conf.d]$ supervisorctl
test_service RUNNING pid 3131, uptime 8 days, 22:56:25
supervisor> reload all
Really restart the remote supervisord process y/N? y
Restarted supervisord
supervisor> help
default commands (type help <topic>):
=====================================
add exit open reload restart start tail
avail fg pid remove shutdown status update
clear maintail quit reread signal stop version
*、设置web方式访问
[inet_http_server] ; inet (TCP) server disabled by default
port=*:9001 ; (ip_address:port specifier, *:port for all iface)
username=admin ; (default is no username (open server))
password=123 ; (default is no password (open server))
*、添加或者修改配置文件后,需要重新加载
/usr/local/python27/bin/supervisorctl reload
*、配置多个进程
针对上述的配置,如果还想配置8110,8111,8112,8113端口总不可能每个都写一遍吧,那么这里就会有如下解决办法:
[program:ycloud]
command=sudo python /var/www/myapp/manage.py --port=811(process_num)d
process_name=%(program_name)s-811%(process_num)d ; process_name expr (default %(program_name)s)
numprocs=4 ; number of processes copies to start (def 1)
numprocs_start=1
1
或者可以这样写:
[program:myapp]
command=python /var/www/res/manage.py --port=%(process_num)s
process_name=%(program_name)s_%(process_num)02d
directory=/var/www/res
numprocs_start=8110
autorestart=true
redirect_stderr=true
stdout_logfile=/var/www/supervisor_log/log.txt
*、不通过root启动
修改用户
[supervisord]
user=user1 ; (default is current user, required if root)
[supervisorctl]
username=user1 ; should be same as http_username if set
*、启动程序
/usr/local/python27/bin/supervisorctl help
/usr/local/python27/bin/supervisorctl start app
/usr/local/python27/bin/supervisorctl start all
/usr/local/python27/bin/supervisorctl stop app
/usr/local/python27/bin/supervisorctl stop all
*有时候不用root权限启动不了
supervisor: couldn't setuid to 0: Can't drop privilege as nonroot user
则用root启动
*同一台服务器上面使用不同的用户启动服务
1、supervisord.conf 中的用户改为root
2、配置文件中使用不同的用户,举例如下:
[program:test1]
command=python script1.py
directory=/your_path/
autostart = true
startsecs = 5
user=user1
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile =/your_path/log/test1.log
[program:test1]
command=python script2.py
directory=/your_path/
autostart = true
startsecs = 5
user=user2
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile =/your_path/log/test2.log
3、用root启动supervisor服务 /usr/local/python27/bin/supervisord -c /etc/supervisor/supervisord.conf
http://supervisord.org/configuration.html#program-x-section-settings
*supervisor主要功能说明:
a、可以监控进程是否死掉,自动重启
b、可以管理进程的启动,停止
c、可以对进程输出的日志进行管理,备份(自动重启)
*、安装supervisor插件
把supervisord.conf拷贝到/etc/supervisor
*、创建配置文件目录
mkdir -p /etc/supervisor/conf.d/
*、supervisord.conf 里面加入程序配置段,配置脚本启动
[include] #把每个应用的文件包含进来,后续好扩展
files = /etc/supervisor/conf.d/*.conf
编辑一份配置文件
vim /etc/supervisor/conf.d/test.conf
[program:test]
directory = python test.py ; 程序的启动目录
command = /var/www/test/ ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = leon ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /var/log/test/test.log ; 需要手动创建
; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere
*、服务端管理
a、启动服务端
/usr/local/python27/bin/supervisord -c /etc/supervisor/supervisord.conf
b、关掉服务端
/usr/local/python27/bin/supervisorctl shutdown
c、重启某一个被管理的进程 xxx 为supervisor配置的进程说明
/usr/local/python/bin/supervisorctl restart xxx
d、登入supervisor命令管理
[test@server1 conf.d]$ supervisorctl
test_service RUNNING pid 3131, uptime 8 days, 22:56:25
supervisor> reload all
Really restart the remote supervisord process y/N? y
Restarted supervisord
supervisor> help
default commands (type help <topic>):
=====================================
add exit open reload restart start tail
avail fg pid remove shutdown status update
clear maintail quit reread signal stop version
*、设置web方式访问
[inet_http_server] ; inet (TCP) server disabled by default
port=*:9001 ; (ip_address:port specifier, *:port for all iface)
username=admin ; (default is no username (open server))
password=123 ; (default is no password (open server))
*、添加或者修改配置文件后,需要重新加载
/usr/local/python27/bin/supervisorctl reload
*、配置多个进程
针对上述的配置,如果还想配置8110,8111,8112,8113端口总不可能每个都写一遍吧,那么这里就会有如下解决办法:
[program:ycloud]
command=sudo python /var/www/myapp/manage.py --port=811(process_num)d
process_name=%(program_name)s-811%(process_num)d ; process_name expr (default %(program_name)s)
numprocs=4 ; number of processes copies to start (def 1)
numprocs_start=1
1
或者可以这样写:
[program:myapp]
command=python /var/www/res/manage.py --port=%(process_num)s
process_name=%(program_name)s_%(process_num)02d
directory=/var/www/res
numprocs_start=8110
autorestart=true
redirect_stderr=true
stdout_logfile=/var/www/supervisor_log/log.txt
*、不通过root启动
修改用户
[supervisord]
user=user1 ; (default is current user, required if root)
[supervisorctl]
username=user1 ; should be same as http_username if set
*、启动程序
/usr/local/python27/bin/supervisorctl help
/usr/local/python27/bin/supervisorctl start app
/usr/local/python27/bin/supervisorctl start all
/usr/local/python27/bin/supervisorctl stop app
/usr/local/python27/bin/supervisorctl stop all
*有时候不用root权限启动不了
supervisor: couldn't setuid to 0: Can't drop privilege as nonroot user
则用root启动
*同一台服务器上面使用不同的用户启动服务
1、supervisord.conf 中的用户改为root
2、配置文件中使用不同的用户,举例如下:
[program:test1]
command=python script1.py
directory=/your_path/
autostart = true
startsecs = 5
user=user1
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile =/your_path/log/test1.log
[program:test1]
command=python script2.py
directory=/your_path/
autostart = true
startsecs = 5
user=user2
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20
stdout_logfile =/your_path/log/test2.log
3、用root启动supervisor服务 /usr/local/python27/bin/supervisord -c /etc/supervisor/supervisord.conf