参考资料
- 官网 https://pypi.org/project/supervisor/
Supervisor是什么?
A Process Control System
Supervisor是使用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程转变为后台守护进程daemon
,并监控进程状态,当异常退出时能自动重启。
Supervisor通过fork
或exec
的方式将被管理的进程当作Supervisor的子进程来启动,只要在Supervisor的配置文件中将需要管理的进程的可执行文件的路径写入即可。当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息,另外也可以选择是否自己启动和报警。
Supervisor可以为supervisord
或每个子进程设置一个非root
的用户,使用这个用户就可以管理它所对应的进程。
Supervisor有什么用呢?
Supervisor是使用Python开发的CS服务,是Linux/Unix系统下的进程管理工具,可以方便的监听、启动、停止、重启一个或多个进程。使用Supervisor管理的进程,当一个进程被意外地杀死时Supervisor会监听到并自动将它重启,因此可以很方便地做到进程自动恢复的功能,不再需要自己手工编写脚本来控制。
为什么需要使用Supervisor呢?
- 使用简单
Supervisor提供了一种统一的方式来start
、stop
、monitor
进程,进程可以单独控制也可以成组控制,可以在本地或远程的命令行或Web接口中配置Supervisor。
在Linux中很多程序都是一直运行着的,一般来说都需要自己编写一个能够实现进程start
/stop
/restart
/reload
的脚本,然后放到/etc/init.d/
文件夹下。这种做法的弊端是需要为每个程序都编写一个类似的脚本,其次当这个进程挂掉的时候,Linux并不会自动重启它,想要自动自动重启的话,还需要自己编写一个监控从重启的脚本。
使用Supervisor可以完美的解决这些问题,Supervisor管理进程是通过fork
或exec
的方式将被管理的进程作为Supervisor的子进程来启动。这样的话,只要在Supervisor的配置文件中将管理的进程的可执行文件的路径写入即可。其次被管理进程作为Supervisor的子进程,当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息,也就可以对挂掉的子进程进行自动重启。
Supervisor支持使用INI
格式配置文件进行配置,容易掌握。而且它为每个进程提供了很多配置选项,可以使你很容易的重启进程或自动的轮转日志。
- 集中管理
Supervisor管理的进程以及进程组的信息全部都写在一个INI
格式的配置文件中,管理Supervisor时可以在本地进行,也可以在远程进行。Supervisor提供了一个Web界面方便使用Web界面进行监控和管理进程。
Supervisor可以对进程组统一管理,也就是说把需要管理的进程写到一个组group
中,然后把这个组作为一个对象进行管理,如启动、停止、重启等操作,这是Linux系统没有的功能。在Linux中要想停止一个进程只能一个一个的去停止,要么就编写脚本去批量停止。
Supervisor与Linux自带的init
进程管理有上面异同点呢?
Supervisor与Launchd、Daemontools、Runit等程序有着相同的功能,不同的是它并不作为ID为1的进程替代init
进程管理工具。相反,它用于控制应用程序,并像其它程序一样。简单来说Supervisor服务管理的进程程序是作为Supervisor的子进程来运行的,因此Supervisor是父进程。
- 方便
有些编译运行的程序在安装完毕后需要为其编写启动停止管理脚本,编写和维护麻烦不说,一旦进程在异常崩溃结束时许多程序都不会正确的重启。使用Supervisor启动管理的程序,其进程是作为Supervisor的子进程来运行的,而且可以配置在进程崩溃停止时自动重启。
- 准确
在UNIX上的进程通常很难获得准确的up/down
状态,pid
文件经常会说谎。Supervisor主进程将进程作为子进程启动,所以它总是知道其子进程正确的up/down
状态,可以方便地对这些数据进行查询。
- 进程分组
进程支持分组启动和停止,也支持启动顺序,即优先级。Supervisor允许为进程分配优先级,并允许用户通过supervisorctl
客户端发出命令,如“全部启动”和“重新启动所有”,它们以预先分配的优先级顺序启动。可将进程分为“进程组”,一组逻辑关联的进程可以作为一个单元停止或启动。
Supervisor组件包括那些呢?
- supervisord
supervisord
主进程是负责管理进程的服务,它会根据配置文件创建指定数量的应用程序的子进程,管理子进程的整个生命周期,对crash
的进程进行重启,对进程变化发送事件通知等。同时内置的Web服务器和XML-RPC接口可以轻松实现进程管理。
supervisord
主进程的配置文件位于:/etc/supervisor/supervisord.conf
- supervisorctl
Supervisor客户端命令行工具,提供了一个类似Shell的操作接口,通过它可以连接到不同的supervisord
主进程上来管理它们各自不同的子程序,命令通过UNIX socket或TCP来和服务进行通讯。用户通过命令行发送消息给supervisord
,可以查看进程状态,加载配置文件,启停进程,查看进程标准输出和错误输出,远程操作等。
另外Supervisor服务端可要求客户端提供身份验证后进行操作
- WebServer
Supervisor提供了Web服务器功能,可通过Web控制进程,不过需要提前设置[inethttpserver]
配置选项。
- XML-RPC Interface
Supervisor提供了XML-RPC接口,像HTTP提供Web UI一样用来控制Supervisor和由它运行的程序。
安装
使用CentOS的YUM工具安装
$ yum install supervisor
使用Python包管理工具pip
命令进行安装
$ pip install supervisor
验证安装是否成功,查看版本。
$ supervisord -v
4.0.2
创建supervisord
主进程配置文件
$ echo_supervisord_conf > /etc/supervisord.conf
使用echo_supervisord_conf
命令可以指定创建主进程文件的具体位置,默认一般会放到系统的/etc/
文件夹下。
主进程配置
打开主进程的配置文件supervisord.conf
$ vim supervisord.conf
[unix_http_server]
file=/tmp/supervisor.sock ; UNIX socket文件默认路径,supervisorctl命令会使用到。
;chmod=0700 ; UNIX socket文件的文件模式,默认为0700。
;chown=nobody:nogroup ; UNIX socket文件的拥有者和组,格式为uid:gid。
;username=user ; default is no username (open server)
;password=123 ; default is no password (open server)
; HTTP服务器配置项
;[inet_http_server] ; HTTP服务器,提供Web UI管理界面。
;port=127.0.0.1:9001 ; Web管理后台运行的IP和端口,如果开放到公网上需注意安全性。
;username=user ; Web管理后台登录的用户名
;password=123 ; Web管理后台登录的密码
; 主进程配置项
[supervisord]
logfile=/tmp/supervisord.log ; 主进程的日志文件路径,默认为当前路径下的supervisord.log即$CWD/supervisord.log
logfile_maxbytes=50MB ; 主进程日志文件大小最大限制,默认为50MB,若设置为0则表示不限制,若超出则会rotate。
logfile_backups=10 ; 主进程日志文件保留备份的数量,默认为10个,若设置为0表示不备份。
loglevel=info ; 主进程日志文件的日志级别,默认为info,其它可选 debug,warn,trace
pidfile=/tmp/supervisord.pid ; 主进程编号文件,默认文件名为supervisord.pid
nodaemon=false ; 主进程是否在前台启动,默认false即以守护进程daemon的方式在后台运行。
minfds=1024 ; 主进程可以打开的文件描述符的最小数量,默认为1024。
minprocs=200 ; 主进程可以打开的进程最小数量,默认为200。
;umask=022 ; process file creation umask; default 022
;user=supervisord ; setuid to this UNIX account at startup; recommended if root
;identifier=supervisor ; supervisord identifier, default is 'supervisor'
;directory=/tmp ; default is not to cd during start
;nocleanup=true ; don't clean up tempfiles at start; default false
;childlogdir=/tmp ; 'AUTO' child log dir, default $TEMP
;environment=KEY="value" ; key value pairs to add to environment
;strip_ansi=false ; strip ansi escape codes in logs; def. false
; The rpcinterface:supervisor section must remain in the config file for
; RPC (supervisorctl/web interface) to work. Additional interfaces may be
; added by defining them in separate [rpcinterface:x] sections.
; RPC配置项
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
; The supervisorctl section configures how supervisorctl will connect to
; supervisord. configure it match the settings in either the unix_http_server
; or inet_http_server section.
; 客户端配置项
[supervisorctl]
; 通过UNIX socket连接supervisord主进程,路径与unix_http_server部分的file一致。
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
;serverurl=http://127.0.0.1:9001 ; 使用HTTP方式连接supervisord主进程
;username=chris ; should be same as in [*_http_server] if set
;password=123 ; should be same as in [*_http_server] if set
;prompt=mysupervisor ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history ; use readline history if available
; The sample program section below shows all possible program subsection values.
; Create one or more 'real' program: sections to be able to control them under
; supervisor.
; 应用程序配置项
# 被管理的进程的配置参数,theprogramname表示进程的名字。
;[program:theprogramname]
;command=/bin/cat ; 程序启动命令的路径
;process_name=%(program_name)s ; 用来表示supervisor进程启动时的名字,是一个Python字符串表达式,默认为%(program_name)s。
;numprocs=1 ; Supervisor启动此程序的多个实例,如果大于1则process_name的表达式必须包含%(process_num)s。
;directory=/tmp ; Supervisor在生成子进程时将切换到该目录下
;umask=022 ; umask for process (default None)
;priority=999 ; 进程启动优先级,默认999,值越小越优先启动。控制程序启动和关闭的顺序,越早启动越晚关闭。
;autostart=true ; 在supervisord主进程启动时此程序自动启动
;startsecs=1 ; 启动1秒后没有异常退出则表示进程正常运行
;startretries=3 ; 启动失败时自动重试次数,默认为3次。
;autorestart=unexpected ; 程序退出后自动重启,可选值为unexpected/true/false,unexpected表示进程意外杀死后才重启。
;exitcodes=0 ; 自动重启预设的退出返回码,默认为0。
;stopsignal=QUIT ; 当收到stop请求时发送信号给程序,默认为TERM,可选值HUP/INT/QUIT/KILL/USR1/USR2
;stopwaitsecs=10 ; 操作系统给主进程发送SIGCHILD信号时等待的时长
;stopasgroup=false ; send stop signal to the UNIX process group (default false)
;killasgroup=false ; SIGKILL the UNIX process group (def false)
;user=chrism ; 若主进程以root身份运行则使用user设置启动子程序的用户
;redirect_stderr=true ; 将标准错误stderr重定向到标准输出stdout,默认为false。
;stdout_logfile=/a/path ; 标准输出stdout日志文件保存路径,需提前创建好否则无法启动。
;stdout_logfile_maxbytes=1MB ; 标准输出stdout日志文件大小最大限制,默认1MB。
;stdout_logfile_backups=10 ; 标准输出stdout日志文件备份数量,默认10个。
;stdout_capture_maxbytes=1MB ; 当进程处于stderr capture mode模式时写入FIFO队列的最大字节大小,单位可选KB/MB/GB
;stdout_events_enabled=false ; emit events on stdout writes (default false)
;stdout_syslog=false ; send stdout to syslog with process name (default false)
;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10 ; # of stderr logfile backups (0 means none, default 10)
;stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false ; emit events on stderr writes (default false)
;stderr_syslog=false ; send stderr to syslog with process name (default false)
;environment=A="1",B="2" ; process environment additions (def no adds)
;serverurl=AUTO ; 是否允许子进程和内部HTTP服务通讯,若设置为AUTO则会自动构造URL。
; The sample eventlistener section below shows all possible eventlistener
; subsection values. Create one or more 'real' eventlistener: sections to be
; able to handle event notifications sent by supervisord.
;[eventlistener:theeventlistenername]
;command=/bin/eventlistener ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1 ; number of processes copies to start (def 1)
;events=EVENT ; event notif. types to subscribe to (req'd)
;buffer_size=10 ; event buffer queue size (default 10)
;directory=/tmp ; directory to cwd to before exec (def no cwd)
;umask=022 ; umask for process (default None)
;priority=-1 ; the relative start priority (default -1)
;autostart=true ; start at supervisord start (default: true)
;startsecs=1 ; # of secs prog must stay up to be running (def. 1)
;startretries=3 ; max # of serial start failures when starting (default 3)
;autorestart=unexpected ; autorestart if exited after running (def: unexpected)
;exitcodes=0 ; 'expected' exit codes used with autorestart (default 0)
;stopsignal=QUIT ; signal used to kill process (default TERM)
;stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10)
;stopasgroup=false ; send stop signal to the UNIX process group (default false)
;killasgroup=false ; SIGKILL the UNIX process group (def false)
;user=chrism ; setuid to this UNIX account to run the program
;redirect_stderr=false ; redirect_stderr=true is not allowed for eventlisteners
;stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10 ; # of stdout logfile backups (0 means none, default 10)
;stdout_events_enabled=false ; emit events on stdout writes (default false)
;stdout_syslog=false ; send stdout to syslog with process name (default false)
;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10 ; # of stderr logfile backups (0 means none, default 10)
;stderr_events_enabled=false ; emit events on stderr writes (default false)
;stderr_syslog=false ; send stderr to syslog with process name (default false)
;environment=A="1",B="2" ; process environment additions
;serverurl=AUTO ; override serverurl computation (childutils)
; The sample group section below shows all possible group values. Create one
; or more 'real' group: sections to create "heterogeneous" process groups.
; 服务组管理
;[group:thegroupname]
;programs=progname1,progname2 ; 配置多个服务的名称
;priority=999 ; 启动优先级,默认999。
; The [include] section can just contain the "files" setting. This
; setting can list multiple files (separated by whitespace or
; newlines). It can also contain wildcards. The filenames are
; interpreted as relative to this file. Included files *cannot*
; include files themselves.
; 包含配置文件
[include]
files = /etc/supervisor/etc/*.conf
查看是否监听9001端口
$ lsof -i:9001
应用程序配置
Supervisor的配置文件可分为两部分,一部分为主进程supervisord
的配置,另一部分是应用程序的配置,应用程序的配置使用[include]
中的file
进行引入,需手工指定应用程序配置所在路径与格式。
[include]
默认配置文件格式为*.ini
,可根据个人习惯配置为*.conf
。
首先来看下应用程序配置项
;[program:theprogramname]
;command=/bin/cat ; 程序启动命令的路径
;process_name=%(program_name)s ; 用来表示supervisor进程启动时的名字,是一个Python字符串表达式,默认为%(program_name)s。
;numprocs=1 ; Supervisor启动此程序的多个实例,如果大于1则process_name的表达式必须包含%(process_num)s。
;directory=/tmp ; Supervisor在生成子进程时将切换到该目录下
;umask=022 ; umask for process (default None)
;priority=999 ; 进程启动优先级,默认999,值越小越优先启动。控制程序启动和关闭的顺序,越早启动越晚关闭。
;autostart=true ; 在supervisord主进程启动时此程序自动启动
;startsecs=1 ; 启动1秒后没有异常退出则表示进程正常运行
;startretries=3 ; 启动失败时自动重试次数,默认为3次。
;autorestart=unexpected ; 程序退出后自动重启,可选值为unexpected/true/false,unexpected表示进程意外杀死后才重启。
;exitcodes=0 ; 自动重启预设的退出返回码,默认为0。
;stopsignal=QUIT ; 当收到stop请求时发送信号给程序,默认为TERM,可选值HUP/INT/QUIT/KILL/USR1/USR2
;stopwaitsecs=10 ; 操作系统给主进程发送SIGCHILD信号时等待的时长
;stopasgroup=false ; send stop signal to the UNIX process group (default false)
;killasgroup=false ; SIGKILL the UNIX process group (def false)
;user=chrism ; 若主进程以root身份运行则使用user设置启动子程序的用户
;redirect_stderr=true ; 将标准错误stderr重定向到标准输出stdout,默认为false。
;stdout_logfile=/a/path ; 标准输出stdout日志文件保存路径,需提前创建好否则无法启动。
;stdout_logfile_maxbytes=1MB ; 标准输出stdout日志文件大小最大限制,默认1MB。
;stdout_logfile_backups=10 ; 标准输出stdout日志文件备份数量,默认10个。
;stdout_capture_maxbytes=1MB ; 当进程处于stderr capture mode模式时写入FIFO队列的最大字节大小,单位可选KB/MB/GB
;stdout_events_enabled=false ; emit events on stdout writes (default false)
;stdout_syslog=false ; send stdout to syslog with process name (default false)
;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10 ; # of stderr logfile backups (0 means none, default 10)
;stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false ; emit events on stderr writes (default false)
;stderr_syslog=false ; send stderr to syslog with process name (default false)
;environment=A="1",B="2" ; process environment additions (def no adds)
;serverurl=AUTO ; 是否允许子进程和内部HTTP服务通讯,若设置为AUTO则会自动构造URL。
应用程序配置文件格式使用[program:theprogramname]
标识,theprogramname
表示主进程管理的应用程序进程的描述,会在客户端supervisorctl
命令或Web界面中使用到,通过supervisorctl start/stop/restart/reload theprogramname
进行操作。
典型的应用程序的配置
$ vim /etc/supervisor/etc/dismiss_worker.conf
[program:dismiss_worker]
command=php think queue:work --queue dismiss_job_queue --daemon --tries 10
directory=/home/wwwroot/yxkwx
process_name=%(process_num)02d
numprocs=5
autostart=true
autorestart=true
startsecs=1
startretries=20
redirect_stderr=true
user=root
stdout_logfile=/etc/supervisor/log/dismiss_worker.out.log
stderr_logfile=/etc/supervisor/log/dismiss_worker.err.log
其实,重点需要关注的配置项是command
和directory
两个。
命令
supervisord
查看启动过的supervisord
服务
$ ps aux|grep supervisord
root 1116 0.0 0.2 222828 16340 ? Ss May22 0:14 /usr/bin/python /usr/bin/supervisord -c supervisord.conf
root 4001 0.0 0.1 222056 15292 ? Ss May22 0:20 /usr/bin/python /usr/bin/supervisord -c supervisord.conf
root 11704 0.0 0.0 112716 988 pts/4 S+ 16:41 0:00 grep --color=auto supervisord
启动主进程
# 指定主进程的配置文件后启动Supervisor,若不使用-c指定配置文件则会寻找默认配置文件。
$ supervisord -c /etc/supervisord.conf
设置主进程服务随机启动
$ systemctl start supervisord.service && systemctl enable supervisord.service
supervisorctl
$ supervisorctl -h
supervisorctl -- 在命令行中由supervisord运行的控件应用程序
用法: /usr/bin/supervisorctl [options] [action [arguments]]
选项:
-c/--configuration FILENAME -- 配置文件路径,若未给定则自动搜索。
-h/--help -- 打印使用信息并退出
-i/--interactive -- 执行命令后启动交互式shell
-s/--serverurl URL -- 监控服务器正在监听的URL,默认为 http://localhost:9001
-u/--username USERNAME -- 用于服务器身份验证的用户名
-p/--password PASSWORD -- 用于服务器身份验证的密码
-r/--history-file -- 保留readline历史记录,若readline可用。
选项 | 全称 | 值 | 描述 |
---|---|---|---|
-c | --configuration | FILENAME | 设置配置文件路径 |
-h | --help | 打印用法信息并退出 | |
-i | --interactive | 执行命令后进入命令行交互模式 | |
-s | --serverurl | URL | 监控服务器正在监听的URL |
-u | --username | USERNAME | 用于服务器身份验证的用户名 |
-p | --password | PASSWORD | 用于服务器身份验证的密码 |
-r | --history-file | 保留readline历史记录,若readline可用。 |
supervisorctl
命令是supervisord
主进程的命令行客户端工具,启动时需要指定与supervisord
相同的配置文件,否则会与supervisord
一样按顺序查找配置文件。使用supervisorctl
命令后会进入命令行模式。
$ supervisorctl -c /etc/supervisord.conf
supervisord
启动成功后,可通过supervisorctl
客户端控制进程的启动、停止、重启,若运行supervisorctl
命令不加参数则会进入supervisor
客户端的交互模式,并会列出当前管理的所有进程。
查看所有任务的状态
$ supervisorctl status
dismiss_worker:00 RUNNING pid 4005, uptime 1 day, 0:25:35
dismiss_worker:01 RUNNING pid 4006, uptime 1 day, 0:25:35
dismiss_worker:02 RUNNING pid 4003, uptime 1 day, 0:25:35
dismiss_worker:03 RUNNING pid 4004, uptime 1 day, 0:25:35
dismiss_worker:04 RUNNING pid 4007, uptime 1 day, 0:25:35
- 第一列:服务命
- 第二列:运行状态,
RUNNING
表示运行中FATAL
表示运行失败STARTING
表示正在启动STOPED
表示任务已停止 - 第三列:进程号
- 第四列:任务已经运行的时间
若输出信息为
unix:///tmp/supervisor.sock no such file
表示在tmp
目录下不存在supervisor.sock
文件,原因是在tmp
临时目录中的文件会被系统定期自动清理掉,所以会显示不存在。解决方式是在主配置文件supervisord.conf
中将tmp
目录更换为/var/run/
目录,这样也就不会被Linux给自动清理掉了。
$ sudo chmod 0777 /var/run
$ sudo chmod 0777 /var/log
$ touch /var/run/supervisor.sock
$ chmod 0777 /var/run/supervisor.sock
$ touch /var/log/supervisord.log
$ chmod 0777 /var/log/supervisord.log
$ vim /etc/supervisord.conf
[unix_http_server]
file=/var/run/supervisor.sock
[supervisord]
logfile=/var/log/supervisord.log
pidfile=/var/run/supervisord.pid
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock
$ supervisorctl update
error: , [Errno 111] Connection refused: file: /usr/lib64/python2.7/socket.py line: 224
$ supervisorctl status
unix:///var/run/supervisor.sock refused connection
重启服务
$ ps aux | grep supervisord
root 1116 0.0 0.2 222828 16328 ? Ss May22 6:14 /usr/bin/python /usr/bin/supervisord -c supervisord.conf
root 4001 0.0 0.1 222464 15704 ? Ss May22 9:01 /usr/bin/python /usr/bin/supervisord -c supervisord.conf
root 28185 0.0 0.0 112716 988 pts/0 S+ 10:17 0:00 grep --color=auto supervisord
$ kill -9 1116
$ kill -9 4001
$ cd /etc
$ supervisorctl shutdown
$ supervisord -c /etc/supervisord.conf
查看单个应用程序进程的运行状态,注意这里的theprogramname
表示自定义配置的应用的名称,例如上面的dismiss_worker
。
$ supervisorctl status theprogramname
$ supervisorctl status dismiss_worker
dismiss_worker: ERROR (no such process)
启动应用程序进程
$ supervisorctl start theprogramname
停止应用程序进程
$ supervisorctl stop theprogramname
停止所有应用程序进程
$ supervisorctl stop all
重启应用程序进程
$ supervisorctl restart theprogramname
命令 | 描述 |
---|---|
supervisorctl restart |
重启名为name的进程 |
supervisorctl restart |
重启组名为gname中的所有进程 |
supervisorctl restart |
重启多个进程或多个组 |
supervisorctl restart all | 重启所有进程 |
加载最新配置文件并停止原有进程并按最新配置启动和管理所有进程,相当于重启所有服务,慎用。
$ supervisorctl reload
根据最新配置文件启动最新配置或有改动的进程
$ supervisorctl update
error: , [Errno 111] Connection refused: file: /usr/lib64/python2.7/socket.py line: 224
$ supervisorctl status
unix:///var/run/supervisor.sock refused connection
关闭主进程
$ supervisorctl shutdown
清空某应用程序进程的进程日志
$ systemctl clear theprogramname
查看日志
根据supervisord.conf
主进程配置文件中设置的日志文件位置默认为/tmp/supervisord.log
进行查看
$ tail -f /tmp/supervisord.log
问题
$ supervisorctl status
error: , [Errno 113] No route to host: file: /usr/lib64/python2.7/socket.py line: 571
错误原因:服务端的防火墙设置了过滤规则
$ supervisord -c supervisord.conf
Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.
For help, use /usr/bin/supervisord -h
错误原因:
unix:///var/run/supervisor/supervisor.sock no such file
问题描述:安装好supervisor没有开启服务直接使用supervisorctl报的错
解决方案:supervisord -c /etc/supervisord.con
未完待续...