Supervisor 守护Node服务器进程

Supervisor 守护Node服务器进程

项目中遇到有些脚本需要通过后台进程运行的项目,比如node、tomcat等,为了保证不被异常中断,之前都是通过nohup、&、screen来实现,带着能否做一个start/stop/restart/reload的服务启动的想法找到里Supervisor。关于supervisor的介绍在网上大致搜索总结如下:

Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。

  1. Supervisor linux安装?
  2. Supervisor 配置?
  3. 实例配置?
  4. 问题说明?

Supervisor linux 安装

先下载最新的supervisor安装包:https://pypi.python.org/pypi/supervisor , 如:

cd /usr/local/src
wget https://pypi.python.org/packages/7b/17/88adf8cb25f80e2bc0d18e094fcd7ab300632ea00b601cbbbb84c2419eae/supervisor-3.3.2.tar.gz
tar -zxvf supervisor-3.3.2.tar.gz
cd supervisor-3.3.2
python setup.py install #本地python版本为python2.7
# python2.7 setup.py install #本地python版本为python3以上

Supervisor 配置

1.生成配置文件

echo_supervisord_conf > /etc/supervisord.conf

2.启动

supervisord -c /etc/supervisord.conf

查看 supervisord 是否在运行:

ps aux | grep supervisord

3.配置

打开配置文件

vim /etc/supervisord.conf

在配置文件底部,配置include

[include]
files=/etc/supervisor/*.conf #若你本地无/etc/supervisor目录,请自建

用supervisor管理进程,配置如下:

cd /etc/supervisor
vim ossfs.conf # 这里的文件名称自定义

加入以下内容:

; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名
[program:your_program_name] 
command=python server.py --port=9000
;numprocs=1                 ; 默认为1
;process_name=%(program_name)s   ; 默认为 %(program_name)s,即 [program:x] 中的 x
directory=/home/python/tornado_server ; 执行 command 之前,先切换到工作目录
user=oxygen                 ; 使用 oxygen 用户来启动该进程
; 程序崩溃时自动重启,重启次数是有限制的,默认为3次
autorestart=true            
redirect_stderr=true        ; 重定向输出的日志
stdout_logfile = /var/log/supervisord/tornado_server.log
loglevel=info

这里是启动要配置的参数,请根据自己的项目自定义添加

更改了supervisor配置文件,需要重启,运行以下指令:

supervisorctl reload

4.supervisorctl的用法

supervisord : 启动supervisor
supervisorctl reload :修改完配置文件后重新启动supervisor
supervisorctl status :查看supervisor监管的进程状态
supervisorctl start 进程名 :启动XXX进程
supervisorctl stop 进程名 :停止XXX进程
supervisorctl stop all:停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl update:根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启

3.实例配置

这里以两个服务器进程配置事例:

[program:node_clw]

command=/usr/local/bin/node /root/clw/nodejs_tcp_clw.js

directory=/root/clw/

umask=022

startsecs=0

stopwaitsecs=0

user=root

redirect_stderr=true

stdout_logfile=/root/logs/clw.log

autorestart=true

[program:node_follow]

command=/usr/local/bin/node /root/clw/nodejs_tcp_follow.js

directory=/root/clw/

umask=022

startsecs=0

stopwaitsecs=0

user=root

redirect_stderr=true

stdout_logfile=/root/logs/follow.log

autorestart=true


4.问题说明

在reload进程的时候可能会遇到如下问题:

error: , [Errno 2] No such file or directory: file: /usr/lib/python2.7/socket.py line: 228

在运行 reload 命令前,先运行如下两个命令

sudo supervisord -c /etc/supervisor/supervisord.conf  
sudo supervisorctl -c /etc/supervisor/supervisord.conf

即可解决 socket error,然后再使用 reload 命令,就可以正常的启动 supervisor 了。

你可能感兴趣的:(Supervisor 守护Node服务器进程)