本文发自 http://www.binss.me/blog/use-supervisor-as-daemon-on-ubuntu/,转载请注明出处。

之前在科学上网的VPS上安装shadowsocks的时候,作者提到了使用supervisor来后台运行并守护shadowsocks进程,从而避免shadowsocks半路挂掉的问题。

官方定义:

Supervisor is a client/server system that allows its users to control a number of processes on UNIX-like operating systems.

个人使用感受:

好用,可靠,赞!

此次当我准备另外一台vps上部署一个玩具tornado server(玩具到还没拿nginx包一层反向代理)时候,我想起了使用supervisor来守护我的server进程。

  1. 安装supervisor

    $ sudo apt-get install supervisor
  2. 修改配置文件

    sudo vim /etc/supervisor/supervisord.conf

    跳到最后一行,插入以下内容:

    //要后台运行的命令
    [program:程序名]
    command = python /home/bin/server.py    
    //程序随supervisor启动
    autostart = true    
    //自动重启程序
    autorestart = true   
    //指定标准错误日志输出文件
    stderr_logfile = /home/bin/log/log_error.log    
    //指定标准日志输出文件
    stdout_logfile = /home/bin/log/log.log

    注:如果没有配置文件,可使用模版生成配置文件

    $ echo_supervisord_conf > /etc/supervisor/supervisord.conf

    由于是写入etc目录,所以需要root权限。可使用su切换到root再执行该命令。

  3. 启动supervisor

    $ sudo service supervisor start
  4. 由于我们设置了程序随supervisor启动,因此此时我们的程序已经启动。可以使用ps查找:

    $ ps -ef | grep 程序名
  5. 由于supervisor为C/S架构(supervisord/supervisorctl),此后我们只需通过客户端supervisorctl就可以控制服务端的运行。

    一些常用命令:

    // 启动程序
    sudo supervisorctl start 程序名      
    // 停止程序
    sudo supervisorctl stop 程序名       
    // 重启程序
    sudo supervisorctl restart 程序名    
    // 重载配置文件,重启supervisord
    sudo supervisorctl reload

    当程序名为all 时,泛指所有程序。