使用 Supervsior 守护进程
概述
一般来说,在终端开启的服务,如果退出终端的话,就会自动关闭服务。这个时候需要守护这个服务的进程。
Supervisor 是一个用 Python 写的进程管理工具,可以很方便的用在 UNIX-like 系统(不支持 Windows )下启动、重启、关闭进程等。其中 supervisord 是 server 端,supervisorctl 是 client 端。
参考资料:
Supervisor管理项目、进程
python web 部署:nginx + gunicorn + supervisor + flask 部署笔记
安装
直接用 pip 安装即可
sudo pip install supervisor
安装之后就可以在终端中执行这三个命令:echo_supervisord_conf(生成配置文件),supervisord(服务端),supervisorctl(客户端)。
echo_supervisord_conf
我们用 echo_supervisord_conf 命令生成配置文件:
echo_supervisord_conf > supervisor.conf # 生成 supervisor 默认配置文件
然后我们可以在配置文件中部署一个 flask 应用,示例如下:
[program:myapp]
command=/Users/zhouyang/Documents/projects/flask-project/venv/bin/gunicorn -w4 -b0.0.0.0:2171 hello:app ; supervisor启动命令
directory=/Users/zhouyang/Documents/projects/flask-project ; 项目的文件夹路径
startsecs=0 ; 启动时间
stopwaitsecs=0 ; 终止等待时间
autostart=false ; 是否自动启动
autorestart=false ; 是否自动重启
stdout_logfile=/Users/zhouyang/Documents/projects/flask-project/log/gunicorn.log ; log 日志
stderr_logfile=/Users/zhouyang/Documents/projects/flask-project/log/gunicorn.err
需要注意的是,我是用的 venv 虚拟环境的 flask。
supervisord
然后我们通过配置文件启动 Supervisor 服务端:
supervisord -c supervisor.conf # 通过配置文件启动supervisor
supervisorctl
启动服务端之后,我们查看进程运行状态:
supervisorctl -c supervisor.conf status # 察看supervisor的状态
我们发现进程并没有运行,因为需要我们手动让进程运行:
supervisorctl -c supervisor.conf start [all]|[appname] # 启动指定/所有 supervisor管理的程序进程
supervisorctl -c supervisor.conf stop [all]|[appname] # 关闭指定/所有 supervisor管理的程序进程
如果要添加新的进程,需要改配置文件,然后重启服务器:
supervisorctl -c supervisor.conf reload # 重新载入 配置文件
管理界面
最后,supervisor 还有一个 web 的管理界面,需要我们在配置文件里面修改成下面这样:
[inet_http_server] ; inet (TCP) server disabled by default
port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface)
username=user ; (default is no username (open server))
password=123 ; (default is no password (open server))
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
username=user ; should be same as http_username if set
password=123 ; should be same as http_password if set
;prompt=mysupervisor ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history ; use readline history if available
然后我们访问 http://127.0.0.1:9001 可以看到 supervisor 的 web 管理界面啦~~
使用 Supervsior 守护进程的更多相关文章
- Linux Supervisor 守护进程基本配置
supervisor:C/S架构的进程控制系统,可使用户在类UNIX系统中监控.管理进程.常用于管理与某个用户或项目相关的进程. 组成部分supervisord:服务守护进程supervisorctl ...
- Linux学习笔记(9)-守护进程
明天学这个!! ---------------------------------------------------------- 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终 ...
- ASP.NET Core Linux下为 dotnet 创建守护进程(必备知识)
前言 在上篇文章中介绍了如何在 Docker 容器中部署我们的 asp.net core 应用程序,本篇主要是怎么样为我们在 Linux 或者 macOs 中部署的 dotnet 程序创建一个守护进程 ...
- linux系统编程之进程(八):守护进程详解及创建,daemon()使用
一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.它不需要用户输入就能运行而且提供某种服务,不是对整个 ...
- linux下的守护进程daemon
什么是守护进程?其实感觉守护进程并没有什么明确的定义,只是守护进程有一些特征,这是它需要遵循的. 守护进程的第一个特征是长时间在后台运行的程序,并且主要是为了提供某种服务,而为了能够让服务尽可能随时都 ...
- cloudera learning3:Hadoop配置和守护进程logs
Services:Haddoop cluster上可以部署的组件,比如HDFS,YARN,HBase等. Roles:在service配置时,由Cloudera Manager创建.比如NameNod ...
- Android守护进程
这几天,一位做Android的朋友和我探讨了一个问题:因为业务需求的原因,在自己的App长时间不使用被kill掉之后,如何让它再重新运行起来. 虽然,我本身很排斥这种做法,有点类似“流氓软件”的行为, ...
- Android 通过JNI实现守护进程,使得Service服务不被杀死
来自: http://finalshares.com/read-7306 转载请注明出处: http://blog.csdn.net/yyh352091626/article/details/5054 ...
- linux下的守护进程
关于守护进程,在此会介绍一下几种: 1.screen 2.supervisord(python) 一:Screen 开始使用Screen 简单来说,Screen是一个可以在多个进程之间多路复用一个物理 ...
随机推荐
- 标准模板库(STL)
组件: 容器:管理某类对象的集合. 迭代器:用来在一个对象集合内遍历元素. 算法:处理集合内的元素. 容器 序列式容器:顾名思义.array,vector,deque,list 和 forward_l ...
- 多线程与UI操作(一)
C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它. 此时它将会在内部调用n ...
- oracle监听启动很慢
TNS-12531: TNS:cannot allocate memory 首先查看内存,free -m 发现当前的空闲内存还有很多,那就不是内存不足的问题 想到之前重启过数据库服务器,查看主机名ho ...
- uestc summer training #9 牛客第三场 BFS计数
G.coloring tree BFS计数 题目:给你n(<=5000)个节点的一颗树 你有K(<=5000)种颜色 你可以给每一个节点染一种颜色 总共有Kn种染色方法 在一种染色方法中 ...
- jquery前端问题随记
1.图片名称不变,但要求刷新,web页面不重新加载渲染,在url地址后面加t=时间戳 js脚本 img.src=url+"?t="+Math.random() 如果是jsp页面,要 ...
- POJ 1038 Bugs Integrated Inc (复杂的状压DP)
$ POJ~1038~~\times Bugs~Integrated~Inc: $ (复杂的状压DP) $ solution: $ 很纠结的一道题目,写了大半天,就想练练手,结果这手生的.其实根据之前 ...
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、jinfo、jconsole使用详解
JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jstack.jmap.jhat.jstat等小巧的工具,本博客希望能起抛砖引玉之用,让 ...
- windows脚本复制文件(将u盘文件复制到固定路径)
@echo off for /f "tokens=2 delims==" %%a in ('wmic LogicalDisk where "VolumeName='Hel ...
- 【Winform-获取ListView选中行】Winform如何获取ListView选中行数据 ?
=========这是Winform================== 1.设计窗体 一个ListView listView1 一个textBox txbSelected 2.listV ...
- wx小程序知识点(四)
四.页面间数据传递 和 参数传值 (1)页面间数据传递 ① 全局变量 ② 页面跳转或重定向时使用url携带参数(wx.navigateTo(urlStr)) ③ 使用组件模板 template < ...