在 OSX 上安装使用 Supervisor

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/

相关文章推荐