extremely simple Example of how to use supervisor

之前介绍了如何使用frp进行内网穿透,以及如何在vps上部署自己的动态网页应用等文章,其中都涉及到了如何让自己写的程序能自己在后台不断运行,挂掉之后能自动重启这样的问题,这个问题可以借助supervisor解决。

这篇文章用一个极简的例子——一个不断计数的简单Python程序来解释supervisor最基本的用法。

下载安装

Ubuntu系统下

sudo apt-get install supervisor

准备一个需要supervisor管理的简单程序

1
2
3
4
5
6
7
import time
count = 0

while(1):
count+=1
time.sleep(1)
print("test time elapsed: ",count,flush=True)

这个程序唯一的作用就是每隔一秒打印一句话,其中用flush=True就能让这句话输出到log里,这里如果直接自己运行可以在终端看到这样的输出:

➜ ~ python3 testS.py
test time elapsed: 1
test time elapsed: 2
test time elapsed: 3
test time elapsed: 4
test time elapsed: 5
test time elapsed: 6

配置supervisor

需要编写一个配置文件,说明要管理哪个程序, 该配置文件的位置如下。

sudo vim /etc/supervisor/conf.d/testS.conf

1
2
3
4
5
6
[program:testS] # 起的名字,后面要用
command=python3 /home/tom1/testS.py # 运行该程序的指令
autostart=true # 是否自动启动
autorestart=true # 是否自动重启
stderr_logfile=/var/log/testS.err.log # 报错log
stdout_logfile=/var/log/testS.out.log # 输出log

启动supervisor

可以选择进入sudo模式,也可以直接用sudo运行管理supervisor的命令。

supervisorctl reread

supervisorctl update

之后这个简单的Python计数程序就自动开始在后台运行了,输出日志会持续不断的写在/var/log/testS.out.log里。

root@tom:/home/tom1# cat /var/log/testS.out.log
test time elapsed: 1
test time elapsed: 2
test time elapsed: 3
test time elapsed: 4
test time elapsed: 5
test time elapsed: 6
……

通过直接使用supervisorctl,可以直接查看到当前supervisor管理的程序

root@tom1:/home/tom1# supervisorctl
testS STOPPED Feb 01 10:16 AM
supervisor>
root@tom1:/home/tom1# supervisorctl start testS
testS: started
root@tom1:/home/tom1# supervisorctl
testS RUNNING pid 23992, uptime 0:00:07
supervisor>
root@tom1:/home/tom1# supervisorctl stop testS
testS: stopped

如果想停止,重启,启动配置文件里的程序,可以使用相关命令

supervisorctl stop [名字]

supervisorctl start [名字]

supervisorctl restart [名字]