安装和配置
直接使用pip安装即可
sudo pip install supervisor
安装完成后,选择一个常用目录(用于存放supervisor配置信息和输出日志),此目录在下文中用<sv_path>
表示,执行:
# 在该目录下生成配置文件'my.conf'
cd <sv_path>
echo_supervisord_conf > ./my.conf
在<sv_path>
下创建两个文件夹,分别为supervisor
和log
(此名称随便起),前者用于存放supervisor.sock
和supervisor.pid
,后者用于存放进程的日志:
cd <sv_path>
mkdir supervisor
mkdir log
然后,使用vim打开my.conf
文件(该文件中,分号是注释,为了简洁,就不展示注释掉的语句了),进行修改:
[unix_http_server]
; 这里修改为前面建立的路径
file=<sv_path>/supervisor/supervisor.sock ; the path to the socket file
[inet_http_server] ; inet (TCP) server disabled by default
port=127.0.0.1:9001 ; ip_address:port specifier, *:port for all iface
[supervisord]
; 这里修改为前面建立的路径
logfile=<sv_path>/log/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10 ; # of main logfile backups; 0 means none, default 10
loglevel=info ; log level; default info; others: debug,warn,trace
; 这里修改为前面建立的路径
pidfile=<sv_path>/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false ; start in foreground if true; default false
silent=false ; no logs to stdout if true; default false
minfds=1024 ; min. avail startup file descriptors; default 1024
minprocs=200 ; min. avail process descriptors;default 200
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
; 这里修改为前面建立的路径
serverurl=unix://<sv_path>/supervisor/supervisor.sock ; use a unix:// URL for a unix socket
接下来,在my.conf
文件中,配置需要守护的进程:
; program后面的auto_connect是进程名称,可自定义
[program:auto_connect]
command=python xxx.py ; the program (relative uses PATH, can take args)
directory=<your_code_path> ; directory to cwd to before exec (def no cwd)
autostart=true ; start at supervisord start (default: true)
startretries=99999 ; max # of serial start failures when starting (default 3)
redirect_stderr=true ; redirect proc stderr to stdout (default false)
stdout_logfile=<sv_path>/log/auto_connect.log ; stdout log path, NONE for none; default AUTO
[program:natapp]
; 注意,这种不在PATH里的命令,要使用绝对路径
command=<your_natapp_command_path>/natapp
autostart=true
startretries=99999
redirect_stderr=true
stdout_logfile=<sv_path>//log/natapp.log
[program:frp]
command=<your_frp_command_path>/frpc -c <your_frp_ini_path>/frpc.ini
autostart=true
startretries=99999
redirect_stderr=true
stdout_logfile=<sv_path>/log/frp.log
接下来,启动supervisor即可:
# 这里的my.conf建议使用绝对路径
supervisord -c <sv_path>/my.conf
常用命令介绍
- supervisorctl update
假如改动了my.conf
,执行此命令后,会将有改动的进程重启,无改动的进程无影响 - supervisorctl reload
假如改动了my.conf
,执行此命令后,所有进程都将重启 - supervisorctl status
查看所有守护进程的运行状态 - supervisorctl start program_name
启动名为program_name
的进程 - supervisorctl restart program_name
重启名为program_name
的进程 - supervisorctl stop program_name
关闭名为program_name
的进程 - supervisorctl stop all
关闭全部进程
关闭supervisor
# 通过ps命令找到之前运行的supervisor的pid,假设为sv_pid
ps -ef | grep supervisor
kill -s 9 sv_pid
# 执行unlink命令,否则再次启动supervisor时会报错
unlink <sv_path>/supervisor/supervisor.sock