Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上。Supervisor 官方版目前只能运行在 Python 2.4 以上版本,但是还无法运行在 Python 3 上,不过已经有一个 Python 3 的移植版 supervisor-py3k。

什么情况下我们需要进程管理呢?就是执行一些需要以守护进程方式执行的程序,比如一个后台任务,我最常用的是用来启动和管理基于 Tornado 写的 Web 程序。

除此之外,Supervisor 还能很友好的管理程序在命令行上输出的日志,可以将日志重定向到自定义的日志文件中,还能按文件大小对日志进行分割。

Supervisor 有两个主要的组成部分:

  1. supervisord,运行 Supervisor 时会启动一个进程 supervisord,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启。
  2. supervisorctl,是命令行管理工具,可以用来执行 stop、start、restart 等命令,来对这些子进程进行管理。

安装

1 sudo pip install supervisor

创建配置文件

12 echo_supervisord_conf > /etc/supervisord.conf 

如果出现没有权限的问题,可以使用这条命令

1 sudo su root c \”echo_supervisord_conf > /etc/supervisord.conf\”

配置文件说明

想要了解怎么配置需要管理的进程,只要打开 supervisord.conf 就可以了,里面有很详细的注释信息。

打开配置文件

12 vim /etc/supervisord.conf 

默认的配置文件是下面这样的,但是这里有个坑需要注意,supervisord.pid 以及 supervisor.sock 是放在 /tmp 目录下,但是 /tmp 目录是存放临时文件,里面的文件是会被 Linux 系统删除的,一旦这些文件丢失,就无法再通过 supervisorctl 来执行 restart 和 stop 命令了,将只会得到unix:///tmp/supervisor.sock 不存在的错误 。

123456789101112131415161718192021222324252627282930313233343536373839 [unix_http_server];file=/tmp/supervisor.sock   ; (the path to the socket file);修改为 /var/run 目录,避免被系统删除file=/var/run/supervisor.sock   ; (the path to the socket file);chmod=0700                 ; socket file mode (default 0700);chown=nobody:nogroup       ; socket file uid:gid owner;username=user              ; (default is no username (open server));password=123               ; (default is no password (open server)) ;[inet_http_server]         ; inet (TCP) server disabled by default;port=127.0.0.1:9001        ; (ip_address:port specifier, *:port for ;all iface);username=user              ; (default is no username (open server));password=123               ; (default is no password (open server))... [supervisord];logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log);修改为 /var/log 目录,避免被系统删除logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)logfile_backups=10           ; (num of main logfile rotation backups;default 10)loglevel=info                ; default 10)loglevel=info                ; https://github.com/palmkevin/supervisor-py3k\” target=\”_blank\” rel=\”nofollow\”>supervisor-py3k。

什么情况下我们需要进程管理呢?就是执行一些需要以守护进程方式执行的程序,比如一个后台任务,我最常用的是用来启动和管理基于 Tornado 写的 Web 程序。

除此之外,Supervisor 还能很友好的管理程序在命令行上输出的日志,可以将日志重定向到自定义的日志文件中,还能按文件大小对日志进行分割。

Supervisor 有两个主要的组成部分:

  1. supervisord,运行 Supervisor 时会启动一个进程 supervisord,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启。
  2. supervisorctl,是命令行管理工具,可以用来执行 stop、start、restart 等命令,来对这些子进程进行管理。

安装

1 sudo pip install supervisor

创建配置文件

12 echo_supervisord_conf > /etc/supervisord.conf 

如果出现没有权限的问题,可以使用这条命令

1 sudo su root c \”echo_supervisord_conf > /etc/supervisord.conf\”

配置文件说明

想要了解怎么配置需要管理的进程,只要打开 supervisord.conf 就可以了,里面有很详细的注释信息。

打开配置文件

12 vim /etc/supervisord.conf 

默认的配置文件是下面这样的,但是这里有个坑需要注意,supervisord.pid 以及 supervisor.sock 是放在 /tmp 目录下,但是 /tmp 目录是存放临时文件,里面的文件是会被 Linux 系统删除的,一旦这些文件丢失,就无法再通过 supervisorctl 来执行 restart 和 stop 命令了,将只会得到unix:///tmp/supervisor.sock 不存在的错误 。

123456789101112131415161718192021222324252627282930313233343536373839 [unix_http_server];file=/tmp/supervisor.sock   ; (the path to the socket file);修改为 /var/run 目录,避免被系统删除file=/var/run/supervisor.sock   ; (the path to the socket file);chmod=0700                 ; socket file mode (default 0700);chown=nobody:nogroup       ; socket file uid:gid owner;username=user              ; (default is no username (open server));password=123               ; (default is no password (open server)) ;[inet_http_server]         ; inet (TCP) server disabled by default;port=127.0.0.1:9001        ; (ip_address:port specifier, *:port for ;all iface);username=user              ; (default is no username (open server));password=123               ; (default is no password (open server))... [supervisord];logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log);修改为 /var/log 目录,避免被系统删除logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)logfile_backups=10           ; (num of main logfile rotation backups;default 10)loglevel=info                ;