需求:有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断。当进程中断的时候我需要他能自动重启,保证服务一直在跑着。基于整个需求,一开始想的是起一个脚本,监听该服务的端口,一旦发现端口占用被解除,立即重新执行命令。但是后来发现linux已经有了类似的东西,即今日的主角Supervisor:
安装(Ubuntu)
sudo apt-get install supervisor
可以进入paython测试是否能import supervisor 来确定是否已经装好。
配置
安装好supervisor后就可以编写配置文件了。配置文件放在/etc/supervisor/conf.d/目录下,最好一个进程对应一个.conf文件。
配置文件参数说明:
[program: test] command=xxxxxxxx ;如果有多条命令,可以写入shell脚本再在这里调用 directory=xxxxx ;执行命令时切换到的目录 user=xxxx ;执行命令所用的linux用户身份 autorestart=true ;是否自动重启 autostart=true ;启动supervisor时是否自行启动该程序 redirect_stderr=true ;如果为true则将stderr发送到stdout相应的log文件中去 stdout_logfile=/path/to/logfile ;制定stdout的输出文件 stdout_logfile_maxbytes=10MB ;限定logfile的大小, 默认为50M stdout_logfile_backups=10 ;保存logfile的最大数目,如果操作这个数目则对最早的logfile进行覆盖,默认为10 environment=A="1", B="2" ;设置环境变量,这里可以保存运行程序需要的参数
我要的功能非常简单,仅做了如下配置
[program: server] command=python /home/zxchen/server.py ; autorestart=true ; autostart=true ;
启动服务
sudo supervisorctl reread #成功提示:server: available sudo supervisorctl reload #成功提示:Restarted supervisord sudo supervisorctl start app #如果服务没有启动时可以试试这个指令
检验
lsof -i:端口号 #查看该端口状态 kill -9 PID #kill掉这个进程
再次查看端口状态,发现端口上服务的PID已改变,即成功。
时间: 2024-11-05 21:51:58