supervisor是什么
Supervisor is a client/server system that allows its users to monitor and control a number of processes on UNIX-like operating systems.
supervisor是用Python实现的一款非常实用的进程管理工具。supervisord会帮你把管理的应用程序转成daemon程序,而且可以方便的通过命令开启、关闭、重启等操作,而且它管理的进程一旦崩溃会自动重启,这样就可以保证程序执行中断后的情况下有自我修复的功能。
supervisor安装
mac: brew install supervisor
centos:sudo pip install supervisor
ubuntu:sudo apt-get install supervisor
supervisord配置
使用echo_supervisord_conf查看默认配置
使用echo_supervisord_conf > /etc/supervisord.conf命令将配置文件保存在xx下面,然后修改配置文件。
推荐的方式是将最后一行修改到某个固定文件夹,如下:
[include]
files = /etc/supervisord.d/*.ini
# 这样每次运行都会加载此目录下的配置文件,每个文件单独管理一个进程。而*.ini的内容一般如下:
配置1
[program:server1]
command=python -m server1 # 执行的命令
directory=/home/me/bin # 执行命令的路径
user=uncle # 执行命令的用户
autorestart=true # 出错后自动重启
redirect_stderr=true # 错误日志重定向
stdout_logfile=/home/uncle/log/server1.log # 日志的路径
loglevel=info # 日志的级别
配置2
[program:server2]
command=php server2
directory=/home/me/bin
user=uncle
supervisord启动
supervisord -c supervisord.conf # 指定配置文件启动supervisord
supervisordctl # 启动spuervisordctl
service supervisord restart # 重启supervisord服务
$supervisorctl shutdown # 关闭服务
$supervisorctl reload # 重新载入配置
另外在启动时遇到了比较诡异的错误:
$ sudo service supervisord start
Starting supervisord: Traceback (most recent call last):
File "/usr/bin/supervisord", line 2, in <module>
from supervisor.supervisord import main
ImportError: No module named supervisor.supervisord
具体是Python版本问题,在一篇日本博客中有相应答案:
墙外博客地址: AmazonLinuxでsupervisorをyumインストールする
ps:不要问我为什么能看懂日文,如果你用心,也是可以的~