ubuntu安装和使用supervisor - IDC资讯网_站长学院 - Java PHP Flex Python Ajax CSS 编程 开源 学习 总结 分享

ubuntu安装和使用supervisor

[ 2017-03-13 12:22 | by 草山湖 ]
注意:以下代码,命令和配置在ubuntu14.04LTS上实际测试,其他发行版或ubuntu其他版本仅供参考
安装
安装可以使用一下命令:
sudo apt-get install supervisor

安装成功后,supervisor就会默认启动
  
使用
有很多方法添加进程,看了很多博客上的介绍和加上我的实际使用,我认为一下方法最好用:
将每个进程的配置文件单独拆分,放在/etc/supervisor/conf.d/目录下,以.conf作为扩展名,例如test.conf定义的一个简单的HTTP服务器:
[program:test]
command=python -m SimpleHTTPServer

重启supervisor,让配置文件生效,然后启动test进程:
supervisorctl reload
supervisorctl start test

如果要停止进程,就用stop
其他一些配置,通过这个例子讲解
[program:meta.txn.recover.on.error]
command=/cas/bin/meta.txn.recover.on.error ; 被监控的进程路径
numprocs=1                    ; 启动几个进程
directory=/cas/bin                ; 执行前要不要先cd到目录去,一般不用
autostart=true                ; 随着supervisord的启动而启动
autorestart=true              ; 自动重启。。当然要选上了
startretries=10               ; 启动失败时的最多重试次数
exitcodes=0                 ; 正常退出代码(是说退出代码是这个时就不再重启了吗?待确定)
stopsignal=KILL               ; 用来杀死进程的信号
stopwaitsecs=10               ; 发送SIGKILL前的等待时间
redirect_stderr=true          ; 重定向stderr到stdout
stdout_logfile=logfile        ; 指定日志文件
  ●
常用命令:
supervisorctl start programxxx,启动某个进程
supervisorctl restart programxxx,重启某个进程
supervisorctl stop groupworker:programxxx ,重启所有属于名为groupworker这个分组的进程(start,restart同理)
supervisorctl stop all,停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl reload,载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
supervisorctl update,根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。
supervisor启动和停止的日志文件存放在/var/log/supervisor/supervisord.log
注意:显式用stop停止掉的进程,用reload或者update都不会自动重启


1,supervisor 启动报错:
unix:///var/run/supervisor.sock no such file

运行:
sudo touch /var/run/supervisor.sock
sudo chmod 777 /var/run/supervisor.sock
sudo service supervisor restart

sudo systemctl start supervisor


2,运行python 脚本报错:
supervisor: couldn't exec /var/www/test/supervisor_test.py: ENOEXEC
supervisor: child process was not spawned
原因是没有加 directory 这个属性

[program:worker1]
directory=/var/www/test
command=python /var/www/test/worker.py worker1.log
numprocs=1
autostart=true
autorestart=true
startretries=10
exitcodes=0
stopsignal=KILL
stopwaitsecs=10
redirect_stderr=true
stdout_logfile=/var/log/supervisor/worker1.log

3,supervisor不支持cron job 形式,可以用一个shell脚本来定时执行:

#!/bin/sh
while true
do
    PIDS=`ps -ef |grep worker.py |grep -v grep | awk '{print $2}'`
    if [ "$PIDS" = "" ]; then
        echo `date` "socialtrendwork.py"
        python /var/www/test/worker.py worker.log 1>/dev/null 2>&1 &
        echo `date` "worker.py"
    fi
    #Run every 3600
   sleep 3600
done
操作系统 | 评论(0) | 引用(0) | 阅读(132)