在 OSX 上安装使用 Supervisor

目录
  1. 1. OSX 作为 Server
  • 背景
    1. 1. OSX 作为 Server
    2. 2. Supervisor 管理后台进程
      1. 2.1. 安装 python
      2. 2.2. 安装pip
      3. 2.3. 安装 supervisor
    3. 3. 配置文件
      1. 3.1. 生成配置文件
      2. 3.2. 设置 include
      3. 3.3. 创建目录以及文件
      4. 3.4. 进程配置
    4. 4. 管理 supervisord
      1. 4.1. supervisorctl 常用命令
    5. 5. 配置 OSX 开机启动启动
      1. 5.1. 保存如下xml为
      2. 5.2. 注入命令
      3. 5.3. 注意
      4. 5.4. 错误参考
      5. 5.5. 参考文献
  • OSX 作为 Server

    OSX 大部分情况都是用作个人电脑,少数情况下需要将其作为服务器使用。Bugtags 就有一些服务跑在 OSX 系统上。 遇到的一个问题:keep process alive!

    背景

    OSX 作为 Server

    OSX 大部分情况都是用作个人电脑,少数情况下需要将其作为服务器使用。Bugtags 就有一些服务跑在 OSX 系统上。

    Supervisor 管理后台进程

    系统服务大多需要以后台进程的方式运行,开机自动运行,进程意外退出自动重启。有大量的教程讲述在 Linux 的各种发行版上安装和使用,本文主要关注 OSX 系统。废话少叙,直接上 bash 命令和遇到的坑。

    安装 python

    1
    2
    curl -O http://python-distribute.org/distribute_setup.py
    python distribute_setup.py

    安装pip

    1
    sudo easy_install pip

    安装 supervisor

    1
    sudo pip install supervisor

    配置文件

    生成配置文件

    1
    echo_supervisord_conf > /etc/supervisord.conf

    设置 include

    1
    2
    [include]
    files = /etc/supervisor/conf.d/*.conf

    创建目录以及文件

    1
    2
    mkdir -p /etc/supervisor/conf.d/
    touch /etc/supervisor/conf.d/your_conf.conf

    进程配置

    1
    2
    3
    4
    5
    6
    7
    8
    [program:your_programe]
    command=your_cmd
    startsecs=0
    stopwaitsecs=0
    autostart=true
    autorestart=true
    stdout_logfile=your_log_file
    stderr_logfile=your_error_file

    管理 supervisord

    需要使用sudo 运行 supervisord 与 supervisorctl 命令
    检查是否正常运行

    1
    ps ax|grep supervisor

    管理 supervisord

    1
    sudo supervisorctl -c /etc/supervisord.conf

    supervisorctl 常用命令

    • reread 不重启supervisiond 及其运行任务,读取新配置
    • status 当前运行状态

    配置 OSX 开机启动启动

    保存如下xml为

    1
    /Library/LaunchDaemons/your_package_name.plist
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?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>your_package_name</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>

    注入命令

    1
    sudo launchctl load /Library/LaunchDaemons/your_package_name.plist

    注意

    • 此处必须为 sudo,因为只有在 sudo 运行权限下,supervisord 与 supervisorctl 才可以正常使用
    • 普通用户的 launchctl list和 sudo 用户的是不一样的

    错误参考

    • 应该先启动 supervisord,再使用 supervisorctl 管理,
    • unix:///tmp/supervisor.sock 不存在,是因为 supervisord 没有正确启动
    • 进入 supervisorctl 后报 python 错误,是因为没有使用 sudo 运行

    参考文献

    https://gist.github.com/fadhlirahim/78fefdfdf4b96d9ea9b8
    https://nicksergeant.com/running-supervisor-on-os-x/
    http://oldhammade.net/blog/2014/08/04/installing-supervisord-on-osx-mavericks.html
    http://blog.jackriver.im/run-supervisor-on-osx/

    本文由 kvh 创作,采用 CC BY 3.0 CN协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
    相关文章推荐

    No related post.