在开发过程中经常需要server时候运行在cloud上。这里介绍一个比较好的工具实现这种需求。
Supervisor是一个用 Python 写的进程管理工具,可以很方便的用来启动、重启、关闭进程。
以守护nginx为例
环境:ubuntu
运行Supervisor需要root权限
官方文档:http://www.supervisord.org
1 安装Supervisor
apt-get install supervisor
安装完成后我们可以在/etc/supervisor/找到Supervisor
2 supervisord 配置
/etc/supervisor/supervisord.conf 即为Supervisor配置文件.
我们编写该配置文件启动Supervisor即可以对特定进程进行守护:
vi /etc/supervisor/supervisord.conf
配置文件中注释是用冒号注释;
[include]
files = /etc/supervisor/conf.d/*.conf
我们在[include]后面添加新program
program相关参数说明:
[program:nginx] nginx为我们定义进程名,
directory=/home/ubuntu/webvideo/nginx 待守护程序所在根目录
command=/home/ubuntu/webvideo/nginx/sbin/nginx -g ‘daemon off;’ 启动程序命令
autostart =true 在 supervisord 启动的时候也自动启动
startsecs=5 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart =true 程序异常退出后自动重启
startretries=3 启动失败自动重试次数,默认是 3
user=ubuntu 用哪个用户启动
redirect_stderr=true 把 stderr 重定向到 stdout,默认 false,用于保存程序输出作为log
stdout_logfile_maxbytes=20MB stdout 日志文件大小,默认 50MB
stdout_logfile_backups=20 stdout 日志文件备份数,即一个log写满后会接这开一个log往下写
stdout_logfile =/home/ubuntu/webvideo/nginx/logs/nginx_stdout.loglog存储路径
sample:
[program:nginx]
directory=/home/ubuntu/webvideo/nginx
command=/home/ubuntu/webvideo/nginx/sbin/nginx -g 'daemon off;'
autostart=true
startsecs=3
autorestart=true
startretries=3
user=root
redirect_stderr=true
stdout_logfile_maxbytes=20MB
stdout_logfile_backups=20
stdout_logfile = /home/ubuntu/webvideo/nginx/logs/nginx_stdout.log
[program:x] 其中x使我们定义进程名,我们可以在 supervisorctl 中通过这个值来对程序进行 start、restart、stop 等操作。
Nginx 使用nginx -g ‘daemon off;’ 命令将nginx运行在前台,因为supervisord 无法监控后台进程。
3 启动supervisord
sudo supervisord -c /etc/supervisor/supervisord.conf
ps aux | grep supervisord 我们可以用这条命令看supervisord 是否已经启动
netstat -ntl可以查看端口占用情况
4 supervisord 常用操作
以下命令均需要root权限
supervisorctl status #查看守护程序状态
supervisorctl stop nginx #停止nginx
supervisorctl start nginx #启动nginx
supervisorctl restart nginx #重启 nginx 程序
supervisorctl reread #读取有更新(增加)的配置文件,但不会启动新添加的程序
supervisorctl update #重启配置文件修改过的程序
更新了配置文件需要update一下 才能生效
5 supervisord 进程状态
STOPPED (0) 进程已停止
STARTING (10) 该进程由于启动请求而开始。
RUNNING (20) 该过程正在运行。
BACKOFF (30)该过程进入“ 启动”状态,但随后退出的速度太快而无法移至“ 运行”状态。 前面有startsecs 这个参数设定
STOPPING (40) 由于停止请求,该进程正在停止。
EXITED (100)该进程从RUNNING状态退出(预期或意外)。
FATAL (200)该过程无法成功启动。
UNKNOWN (1000)该进程处于未知状态(supervisord 编程错误)。