本文发自 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进程。
-
安装supervisor
$ sudo apt-get install supervisor
-
修改配置文件
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再执行该命令。
-
启动supervisor
$ sudo service supervisor start
-
由于我们设置了程序随supervisor启动,因此此时我们的程序已经启动。可以使用ps查找:
$ ps -ef | grep 程序名
-
由于supervisor为C/S架构(supervisord/supervisorctl),此后我们只需通过客户端supervisorctl就可以控制服务端的运行。
一些常用命令:
// 启动程序 sudo supervisorctl start 程序名 // 停止程序 sudo supervisorctl stop 程序名 // 重启程序 sudo supervisorctl restart 程序名 // 重载配置文件,重启supervisord sudo supervisorctl reload
当程序名为all 时,泛指所有程序。