linux 使用supervisor来管理进程
现在假设一个脚本是,hello.py,内容是
fo = open('xx.txt','w')
while 1:
fo.write('hello world')
print('hi')
time.sleep(1)
如果使用python hello.py那么控制台一直print hi,会干不了其它活,必须再xshell开个窗口。如果 ctrl +c ,那程序直接结束了。
使它在后台工作可以结尾加个 &,但这样把xshell窗口关了,就结束了,可以看看记事本有没有新增就证明这个了。这时候还会在前面加个nohup,所以全部命令是 nohup python hello.py &,这样才行。
nohup会记录程序的log日志,普通的print不会去记录,如果不重定向日志输出,默认是当前文件夹下面生成了一个nohup.out,这个随时间越来越大,往一个大文件里面读写东西势必会慢,而且可能搞满磁盘,查了下需要一段shell脚本来搞这个,很麻烦。
还有我要结束这个hello.py怎么办,要去 ps -ef |grep 。。。。,然后kill,要再重启则需要再一次输入nohup python hello.py &,命令越长越麻烦,当然也可以把命令写到shell脚本来减少输入,但管理起进程来还是麻烦了点。
supervisor正好用到,
supervisord -c xxx.conf启动,如果单独的supervisor那就是默认使用etc/supervisor.conf这个配置了
在etc/supervisor.conf添加程序配置,但是这样十分不太好,配置文件会变得越来越长,

把最下面的include注释取消掉,每个项目使用单独的配置文件,supervisorconfig文件夹下面有两个项目配置文件,*.ini可以包含这两个。

[program:automobile]
command=/root/miniconda3/bin/uwsgi --ini uwsgib.ini ; 程序启动命令
directory=/root/xxxx/automobile
autostart=True ; 在supervisord启动的时候也自动启动
startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3 ; 启动失败自动重试次数,默认是3
user=root ; 用哪个用户启动进程,默认是root
priority=999 ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/root/yangdefeng/touna/automobile/logs/automobile.out
loglevel=debug ;loglevel 指定了日志的级别,用 Python 的 print 语句输出的日志是不会被记录到日志文件中的,需要搭配 Python 的 logging 模块来输出有指定级别的日志。
stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程 另一个文件,这次开两个一模一样的进程。
[program:daili]
command=/root/miniconda3/envs/py27/bin/python dailiip.py ; 程序启动命令
directory=/root/xxx/代理ip获取
numprocs=2 ;默认为1,; 若 numprocs 不为1,process_name 的表达式中一定要包含 process_num 来区分不同的进程
process_name=%(program_name)s_%(process_num)02d
autostart=false ; 在supervisord启动的时候也自动启动
startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3 ; 启动失败自动重试次数,默认是3
user=root ; 用哪个用户启动进程,默认是root
priority=999 ; 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/root/yangdefeng/touna/代理ip获取/logs/daili.out
loglevel=debug ;loglevel 指定了日志的级别,用 Python 的 print 语句输出的日志是不会被记录到日志文件中的,需要搭配 Python 的 logging 模块来输出有指定级别的日志。
stopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程
比如我分布式爬虫,先开两个一模一样的进程,当然可以在py中用multiprocessing弄出两个进程来,也可以把脚本运行两次不就是两个进程吗。
那么可以指定numprocs=2,nmprocess大于1的时候,一定要设置process_name=%(program_name)s_%(process_num)02d,后面的格式名字随便,总之要能分辨出来是两个嘛,不然supervisorctl start programe时候怎么知道启动什么进程。如果不设置程序名启动supervisord服务时候会报错的。 使用supervisorctl进入supervisor客户单管理
start xx
stop xx 来启动和停止程序。 reload update在配置修改需要生效时候可以使用。 也可以开启web服务来管理程序,在配置中需要把注释去掉;

输入linux的地址加上9001端口,使用账号和密码登录后就能看到程序状态了。这上面可以控制清楚的知道,启动了那些程序,和控制程序的启动和停止,点击tail -f可以在web中看到程序的日志信息了,不用去xshell中去用tali -f查看了。


很方便的东西,可以用来管理python和非python程序。顺便轻松解决了nohup的日志大小切割问题。
linux 使用supervisor来管理进程的更多相关文章
- Docker使用 Supervisor 来管理进程
Docker 容器在启动的时候开启单个进程,比如,一个 ssh 或者 apache 的 daemon 服务.但我们经常需要在一个机器上开启多个服务,这可以有很多方法,最简单的就是把多个启动命令放到一个 ...
- linux:查看以及管理进程
学习笔记内容概要 进程查看的命令:top,ps,pstree 进程管理的命令:kill,nice,renice 查看进程: 一.top工具 top 工具是我们常用的一个查看工具,能实时的查看我们系统的 ...
- linux centos Supervisor守护.netcore进程安装配置
场景:当部署完.netcore程序后 使用dotnet xx.dll 后可以运行,但关闭shell或隔断时间会自动断开,此时部署的.netcore程序就不能访问了,此时需要用到Supervisor了 ...
- Linux:使用systemd管理进程
Blog:博客园 个人 概述 systemd是目前Linux系统上主要的系统守护进程管理工具,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能 ...
- Supervisor 管理进程,Cloud Insight 监控进程,完美!
Supervisor 是由 Python 语言编写.基于 linux 操作系统的一款服务器管理工具,用于监控服务器的运行,发现问题能立即自动预警及自动重启等. Cloud Insight 是一款次世代 ...
- pm2 代替 Supervisor 管理进程
前提 我们在使用 Laravel 的时候不免用到列队来处理任务,而 Laravel 官方文档给出的是 Supervisor 来管理进程和监控.但是我们在使用中有下面几个缺点: Supervisor 单 ...
- Linux服务:使用Supervisor管理进程
一.简介 由于基本每个公司都会用到supervisor这个进程管理工具,这里简单阐述一下. Supervisor (http://supervisord.org) 是一个用Python写Linux下的 ...
- Django与supervisor 管理进程
1.前言 在Django项目中,我们需要用到一些独立于Django框架外的脚本.这样一些脚本可能需要独立的持续运行,且具有很强的可维护性,这个时候supervisor就可以排上用场了. 基于pytho ...
- supervisor管理进程工具配置
Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统 ...
随机推荐
- keras系列︱图像多分类训练与利用bottleneck features进行微调(三)
引自:http://blog.csdn.net/sinat_26917383/article/details/72861152 中文文档:http://keras-cn.readthedocs.io/ ...
- c# dump 程序崩溃 windbg
待研究 http://issf.blog.163.com/blog/static/194129082201002534895/ http://www.cppblog.com/woaidongmao/a ...
- oracle快速创建可用用户
执行语句 create user utaptest identified by utaptest; create tablespace utaptestspace datafile 'd:\data. ...
- hbase 学习(十六)系统架构图
HBase 系统架构图 组成部件说明 Client: 使用HBase RPC机制与HMaster和HRegionServer进行通信 Client与HMaster进行通信进行管理类操作 Client与 ...
- Spark部署
Spark的部署让人有点儿困惑,有些需要注意的事项,本来我已经装成功了YARN模式的,但是发现了一些问题,出现错误看日志信息,完全看不懂那个错误信息,所以才打算翻译Standalone的部署的文章.第 ...
- Android中获取系统上安装的APP信息
Version:0.9 StartHTML:-1 EndHTML:-1 StartFragment:00000099 EndFragment:00003259 Android中获取系统上安装的APP信 ...
- 【5】JVM-垃圾收集器
通过学习了解到现在商用的JVM中的垃圾收集采用的是分代收集算法,即针对不同年代采用不同的收集算法.在JVM中,GC主要作用于堆内存中,堆内存又被划分为新生代和老年代,由于新生代对象绝大多数是朝生夕死, ...
- JUnit注解
在本节中,我们将提到支持在JUnit4基本注释,下表列出了这些注释的概括: 注解 描述 @Testpublic void method() 测试注释指示该公共无效方法它所附着可以作为一个测试用例. @ ...
- JsonObject和Gson详解
参考文件:http://www.cnblogs.com/xwdreamer/archive/2011/12/16/2296904.html一.JsonObject 1.JAR包简介 要使程序可以运行必 ...
- (实用)Ubuntu 开启NFS服务
本文介绍如何在Ubuntu下开启NFS文件系统,从而挂载网络上其他机器的文件系统. NFS, Network File System, 即网络文件系统,通常NFS有提供者和使用者,提供者export自 ...