安装 supervisor

本贴最后更新于 2764 天前,其中的信息可能已经时移世异

安装 supervisor

在 Ubuntu 上, 你可以且应该这样安装:

apt-get install supervisor

除了安装可执行程序本身, 还会创建默认的配置文件和目录:

/etc/supervisord.conf
/etc/supervisor/cond.d/

在 Mac 上, 你无法使用 apt-get, 经测试, 也无法使用 brew. 由于 supervisor 是一个 Python 包, 因此可以使用 pip 来安装:

pip install supervisor

但这样安装后, 是不会创建配置文件的. 你需要自己手工创建. 为求简便, 这里不创建配置文件子目录, 而是直接把所有配置写在 supervisord.conf 本身:

[unix_http_server]
file=/tmp/supervisor.sock                       ; path to your socket file

[supervisord]
logfile=/var/log/supervisord/supervisord.log    ; supervisord log file
logfile_maxbytes=50MB                           ; maximum size of logfile before rotation
logfile_backups=10                              ; number of backed up logfiles
loglevel=error                                  ; info, debug, warn, trace
pidfile=/var/run/supervisord.pid                ; pidfile location
nodaemon=false                                  ; run supervisord as a daemon
minfds=1024                                     ; number of startup file descriptors
minprocs=200                                    ; number of process descriptors
user=root                                       ; default user
childlogdir=/var/log/supervisord/               ; where child log files will live

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock         ; use a unix:// URL  for a unix socket

[program:mongod]
command=/usr/local/bin/mongod

[program:redis-server]
command=/usr/local/bin/redis-server

配置例子

创建/var/log/supervisord/supervisord.log

chmod 777 /var/log/supervisord/supervisord.log

vim /usr/local/etc/supervisord.conf

1.  [unix_http_server]
2.  file=/tmp/supervisor.sock
3.  chmod=0700
4.  
5.  [supervisord]
6.  logfile =  /var/log/supervisord/supervisord.log
7.  logfile_maxbytes =  50MB
8.  logfile_backups=10
9.  loglevel = info
10. pidfile =  /tmp/supervisord.pid
11. nodaemon =  False
12. minfds =  1024
13. minprocs =  200
14. umask =  022
15. identifier = supervisor
16. directory =  /tmp
17. nocleanup = true
18. childlogdir =  /tmp
19.  
20. [supervisorctl]
21. serverurl = unix:///tmp/supervisor.sock
22.  
23. [rpcinterface:supervisor]
24. supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
25.  
26. [include]
27. files =  /usr/local/etc/supervisor/conf.d/*.conf

使用 launchctl 来启动 supervisor 自身

虽然 supervisor 可以很好的管理后台进程, 但是其自身的自启动还是需要借助其它工具. 在 Linux 上, 你可以用 Upstart, SystemVInit, Sysytemd 等. 而在 Mac 上, 还是要借助 launchctl 的帮助. 谁叫这是在 Mac 的地盘上呢? 好消息是, 你只用配置这一次, 以后其它的需要后台启动的服务, 就可以全部交给 supervisor 了.

下面介绍配置的步骤, 顺便吐槽为什么我不喜欢 launchctl .

launchctl 的配置文件可以存放于这些目录:

~/Library/LaunchAgents         Per-user agents provided by the user.
/Library/LaunchAgents          Per-user agents provided by the administrator.
/Library/LaunchDaemons         System wide daemons provided by the administrator.
/System/Library/LaunchAgents   Mac OS X Per-user agents.
/System/Library/LaunchDaemons  Mac OS X System wide daemons.

(配置文件目录太多. 每次添加文件都头大)

这里我在 ~/Library/LaunchAgents 目录下, 创建一个 supervisord.plist 文件, 内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>KeepAlive</key>
    <dict>
        <key>SuccessfulExit</key>
        <false/>
    </dict>
    <key>Label</key>
    <string>supervisord</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/supervisord</string>
        <string>-n</string>
        <string>-c</string>
        <string>/etc/supervisord.conf</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

(配置文件的格式非常奇葩, 本来一行配置可以搞定的事, 它需要一个 n 行的 xml 配置文件, 每个命令参数都需要写在单独的节点里, 及其繁琐, Java 程序员可能比较习惯)

接下来, 你可以启动 supervisor 了:

launchctl load ~/Library/LaunchAgents/supervisord.plist

(这个命令也非常不友好, 例如: 要不要 sudo? 为什么是 load 而不是常规的 start? 为什么要用配置文件的路径而不用名字?)

管理进程

每次修改或增删了配置文件, 都需要执行:

sudo supervisorctl update

这个在刚开始使用 sv 时可能会带来一些困惑. 如果你不执行, 而只是 restart 某个进程, sv 使用的还是以前的版本.

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...