Mac Supervisor 管理进程

无论是在日常工作中还是平时玩代码中,我总是离不开 Supervisor,其实很久之前我就写过一篇文章:supervisord 部署 Flask,在里面,我仔细讲解了如何在 Linux 环境下安装并且配置 supervisord,并且如何部署应用,应该稍微懂点 Linux 的同学就可以按照指导自己在自己的环境下配置一份出来。但是,我日常更多的情况下是在 Mac 下工作的,虽然 Mac 下已经有很多强大的工具让我的工作保持高效,但是,还是有一些东西是 Mac 上的软件不能提供给我的,所以我还是依赖于 supervisor,所以,本文就将讲述一下如何在 Mac 环境下配置一个好用的进程管理环境。

配置 Supervisor 自启动

对于简单的安装配置 supervisor 就不多说了,还是简单的使用 pip 即可安装完毕,Supervisor 的自己配置也可以参照我之前的文章supervisord 部署 Flask进行。但是,这还不够,因为我的电脑是要重启的(是的,Mac 也要重启,我大概半个月或者一个月重启一次)。默认情况下,重启之后 Supervisor 是不会起来的,所以我还得手动让它起来,然后才能带动我的其他软件起来,这个不是很舒服,所以我希望能够调整一下配置,让 Supervisor 自启动。

在搜索了一番之后,发现在 Mac 中有类似于 systemd 的应用,名为:Launchd,Launchd 是 OSX 用来初始化系统的重要进程,它是内核装载成功之后在 OS 环境中启动的第一个进程(好像很厉害)。而且,有意思的一点在于,在 Launchd 中注册一个应用很简单,只需要一个 plist 文件就可以了,通常这个 plist 文件是放在目录 ~/Library/LaunchAgents 下的。所以我就依样画葫芦写了一个配置:

<?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>io.liqiang.supervisord</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/supervisord</string>
        <string>-n</string>
        <string>-c</string>
        <string>/usr/local/share/supervisor/supervisord.conf</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

测试进程

讲道理到这里应该就是就完了。但是,为了让大家有一个比较好的验证体验,所以我还加了一个 MongoDB 的配置,如果你有兴趣的话,默认配置应该放在:/usr/local/share/supervisor/conf.d/mongod.conf 这个位置,配置内容为:

[program:mongod]
command=/usr/local/mongodb/bin/mongod -f /data/conf/mongodb.yaml
autostart=false
autorestart=false
startretries=3
redirect_stderr=true
stdout_logfile = /var/log/supervisord_mongodb.log
loglevel=info
exitcodes=1,2

依照这个配置完成之后,还是老样子:

$ supervisorctl reread
$ supervisorctl update
$ supervisorctl start mongod

这里应该 MongoDB 是起来了,现在连接上去试一下。

Reference

  1. Setting up supervisord in Mac OS X
posted @ 2018-01-30 09:11  行者酱油君  阅读(809)  评论(0编辑  收藏  举报