linux 后台进程管理,Linux 后台进程管理利器 Supervisor
Supervisor 是基于 Python 的进程管理工具。其可方便我们启动守护进程,并对进程进行管理(启动、重启和停止进程,异常退出时还能能自动重启),此外还可以管理自定义的开机启动项。
安装
由于其基于 Python 开发,任何环境都可以通过 pip 安装:
pip install supervisor
此外,Ubuntu 系统可用如下方式安装:
apt-get install supervisor
MacOSX 系统可通过如下方式安装:
brew install supervisor
安装完成后会有如下几个命令工具
supervisord,Supervisor 的守护进程启动命令,运行时会启动一个守护进程,其负责管理的子进程,且可在所管理的进程出现崩溃时自动重启
supervisorctl,用户与 Supervisor 交互的工具,方便用户管理子进程,可用来 stop、start、restart
echo_supervisord_conf,输出默认配置
安装完成后可以用 echo_supervisord_conf 命令测试是否安装成功。
配置
如果是使用 apt 或者 brew 等各平台的软件包管理工具安装的 Supervisor,一般会自动创建默认的配置。如 apt 工具安装后,会创建 /etc/supervisor/supervisord.conf 默认配置;brew 工具安装后,会创建 /usr/local/etc/supervisord.ini 默认配置。但是使用 pip 安装后则可能不会自动创建默认配置,但可以手动创建:
echo_supervisord_conf > /etc/supervisor/supervisord.conf
通常情况下使用默认配置即可,此外还需要配置 program,即所要启动的子进程的配置。通过查看默认配置文件可知,supervisor 的配置使用的是 INI 格式,子进程的配置在 [program:x] 段。没了便于管理,通常将每个应用的配置写到一个文件中,并将这些文件统一放到一个目录下,如 /etc/supervisor/conf.d。这需要在 supervisord.conf 配置中做如下配置:
[include]
files = /etc/supervisor/conf.d/*.conf
配置的含义为,包含 /etc/supervisor/conf.d/ 下所有以 .conf 结果的文件。[program:x] 段配置项说明:
; 标 * 的为必须项
; * 指定为 program 段,冒号后为进程命令
[program:cat]
; * 进程运行的命令,其中可执行文件可以是绝对路径或相对路径,为相对路径时会在 $PATH 变量中查找
command=/bin/cat
; 指定进程名称,默认为 program 段冒号后指定的名称
; 当 numprocs 为 1 时, process_name=%(program_name)s
; 当 numprocs >=2 时, process_name=%(program_name)s_%(process_num)02d
process_name=%(program_name)s
; 进程数量,supervisor 可对一个 program 启动多个进程
numprocs=1
; 执行目录,当配置该选项时,运行程序前将先 chdir 到指定目录
directory=/tmp
; 掩码:--- -w- -w-, 转换后rwx r-x w-x
umask=022
; 优先级,值越高的程序将最后被启动最先被关闭,默认值 999
priority=999
; 如果是 true, 当 supervisor 启动时, 程序将会自动启动
autostart=true
; * 当检测到程序退出时是否自动重启,可知可以为,false,true,unexpected
autorestart=true
; 程序启动多长时间后才确定为启动成功, 默认 1 秒
startsecs=10
; 启动尝试次数,默认 3 次
startretries=3
; 列出进程预期的退出码
; 如果 autorestart 设置为 unexpected,
; 进程退出码不在配置中,则认为进程意外退出,会被重启
; 在 4.0 版本以前为默认为 0,2,4.0 及之后默认为 0
exitcodes=0
; 停止进程的信号,默认 TERM
; 中断: INT(类似于Ctrl+C)(kill -INT pid), 退出后会将写文件或日志(推荐)
; 终止: TERM(kill -TERM pid)
; 挂起: HUP(kill -HUP pid),注意与Ctrl+Z/kill -stop pid不同
; 从容停止: QUIT(kill -QUIT pid)
; KILL, USR1, USR2,其他见命令(kill -l)
stopsignal=TERM
; 最长结束等待时间, 否则使用 SIGKILL
stopwaitsecs=10
; * 运行进程的用户
user=root
; 结束时结束整个进程组
; 启动的子程序还可能会有子进程(如 Tornado)
; 如果只杀死主进程,子进程不会被清理掉,且还会变成孤儿进程
; 通过这两项配置(改为 true),可确保所有子进程都能正确停止, 默认是 false
stopasgroup=false
killasgroup=false
; 重定向错误流到标准输出,等价于 2>&1
redirect_stderr=false
; 日志文件相关配置
stdout_logfile=/a/path ; 标准日志输出文件
stdout_logfile_maxbytes=1MB ; 标准日志文件大小,默认 50MB
stdout_logfile_backups=10 ; 标准日志文件备份保留的数量,默认 10
stdout_capture_maxbytes=1MB ; 当 capture 模式时写入到 FIFO 队列最大字节数,默认为 0
stderr_logfile=/a/path
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB
; 环境变量设置
environment=A="1",B="2"
; 服务进程地址
serverurl=AUTO
配置示例:
[program:notebook]
command=jupyter notebook --notebook-dir=/home/konghy/JupyterNotebook --no-mathjax --no-browser
directory=/home/konghy/JupyterNotebook
stopsignal=QUIT
autostart=true
autorestart=true
startsecs=10
startretries=36
stopasgroup=true
killasgroup=true
stdout_logfile=/home/konghy/JupyterNotebook/.logs/ipython_check.log
stdout_logfile_backups=10
stdout_logfile_maxbytes=10MB
stderr_logfile=/home/konghy/JupyterNotebook/.logs/ipython_check_err.log
stderr_logfile_maxbytes=10MB
stderr_logfile_backups=10
使用
supervisor 的管理和使用只有两个命令:
supervisord: supervisor 的服务器端部分,用于 supervisor 启动
supervisorctl: 启动supervisor的命令行窗口,在该命令行中可执行 start、stop、status、reload 等操作
启动 supervisor 的服务器会默认启动所有应用:
supervisord -c /etc/supervisord.conf
supervisorctl
管理工具 supervisorctl 常用的子命令:
status: 查看程序状态
stop: 关闭程序
start: 启动程序
restart: 重启程序
reread: 读取有更新(增加)的配置文件,不会启动新添加的程序
update: 重启配置文件修改过的程序
tail: 查看进程日志
每次修改配置文件后需进入 supervisorctl,执行 reload, 改动部分才能生效,或者可以重启服务:
service supervisor reload
可以不用进入 supervisorctl 命令行,而直接在其后加上相应命令来完成操作,例如启动应用和查看状态:
$ supervisorctl
supervisor> status
supervisor> start app
默认的 supervisor 配置文件是放在 /etc/supervisord.conf 目录下,如果使用 supervisorctl 无法找到配置文件,其则无法获取与 supervisord 的连接方式,此时可能会有如下错误:
http://localhost:9001 refused connection
解决方式是使用 -c 指定配置文件位置:
supervisorctl -c /path/to/supervisord.conf status
或者将配置文件链接到 /etc 目录下:
ln -s /path/to/supervisord.conf /etc/
Web 管理界面
将配置文件中 [inet_http_server] 部分打开并做相应配置,然后重启 supervisor 服务即可用浏览器管理所有应用。
;[inet_http_server]
;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))
添加开机启动服务
如果用 pip 或者 easy_instal 安装 supervisor,则不会默认将其添加到系统开机启动服务中。但这项工作可以自己来做,如果在 Ubuntu 系统下工作,用 apt 工具来安装则一切工作都会做好。
要添加系统服务首先需要在 /etc/init.d/ 中创建服务脚本,记得为脚本添加可执行权限 chmod a+x /etc/init.d/superviser,然后为将 supervisor 添加到系统服务中:
update-rc.d supervisor defaults
这样就 supervisor 就可以随系统开机启动,并且可以像系统服务那样来管理。
如果在 MacOSX 系统中使用 brew 安装,则可以使用 brew service 来添加开机启动:
brew services start supervisor
参考资料
linux 后台进程管理,Linux 后台进程管理利器 Supervisor相关推荐
- linux常驻进程与非常驻进程,Daemontools和Supervisor管理linux常驻进程
linux主要使用supervise来管理常驻进程.基于supervise的两个比较重要的工具是Daemontools和Supervisor. 实际上,supervise也算Daemontools的一 ...
- linux服务器的又一管理利器webmin图解教程
Webmin的安装及应用 前2天,有个人打电话问我,说公司有个服务器锁在机房,没有钥匙,远程管理这台服务器的方法很多,到底哪个比较合适他用. 我顺带就问了一下具体情况,没有图形化安装,有防火墙,开启了 ...
- linux 进程管理 ppt,Linux内核结构与进程管理.ppt
Linux内核结构与进程管理.ppt Linux 内核结构与进程管理,Linux系统结构Linux kernel 开放源代码的linux操作系统内核,目前版本为2.6,Linux内核组成1. 进程调度 ...
- Linux基础篇——Linux进程、服务管理
文章目录 1. 什么是进程 2. Linux下进程与执行者的关系(多人多任务环境) 3. 工作(Job)管理 3.1 将指令丢到后端执行 & 3.2 将目前的工作暂停 Ctrl+z 3.3 j ...
- Linux系统中的进程管理
Linux系统中的进程管理 了解进程 进程是已启动的可执行程序的运行实例,进程有以下组成部分: • 已分配内存的地址空间: • 安全属性,包括所有权凭据和特权: • 程序代码的一个或多个执行线程: • ...
- linux虚拟地址空间管理,Linux内存管理4---虚拟地址空间管理
1.前言 本文所述关于内存管理的系列文章主要是对陈莉君老师所讲述的内存管理知识讲座的整理. 本讲座主要分三个主题展开对内存管理进行讲解:内存管理的硬件基础.虚拟地址空间的管理.物理地址空间的管理. 本 ...
- 高效管理 Linux 进程:如何后台执行程序、查看进程、终止任务
目录 前言 一.nohup命令详解 1-1.nohup命令介绍 1-2.语法格式 1-2-1.基础语法介绍 1-2-2.执行脚本文件 1-2-3.执行python文件 1-2-4.拓展延申:在服务器上 ...
- linux中把程序启到前台,Linux操作系统桌面应用与管理Q4rw2进程与作业管理-PPT精品文档.ppt...
红旗Linux,情境四任务2:进程和作业管理,任务2-1,了解进程管理知识用命令实现进程管理,Linux进程管理,WINDOWS?任务管理器LINUX利用命令管理进程包括前.后台进程的管理以及终止等, ...
- Linux系统基础-2018-日常管理和维护
linux-10.日常管理和维护 1. RPM软件包管理 1.1. RPM软件包简介 1.1.1. 什么是RPM软件包 1.1.2. PRM软件包的设计目标 1.1.3. PRM包管理的用途 1.2. ...
- linux服务器管理技术试卷,《Linux网络操作系统配置与管理》试卷D含答案
<Linux 管理与服务器配置>试卷D 第1页,共4页 密 密 封 线 内 不 得 答 题 <Linux 网络操作系统配置与管理>试卷D (考时:90分钟) 适用专业: 课程代 ...
最新文章
- hibernate mysql 模糊查询_服务器-hibernate操作mysql,模糊查询时中文查不到,数字和英文可以查到...
- php 当前路径函数,PHP解析目录路径的3个函数总结
- 《深度学习入门:基于Python的理论与实现》第四章代码原理详细解析
- NOIP 2011 Day2
- lintcode 落单的数(位操作)
- python平均数 中位数函数_R和python语言如何求平均值,中位数和众数
- mysql delete|删除 命令的注意点
- 数据结构笔记(三)-- 链式实现顺序表
- Mysql 浮点型入门
- STM32开发环境的搭建
- eclipse快捷方式打不开解决方法
- 中国各地的特色茶,你知道几个?
- ReactNative解决方案研究
- 经典车间生产调度问题模型及其算法 目录
- 国产磁力架的规格:1.5ml,2ml,15ml,50ml,0.2ml离心管,PCR单管,8连排管,12连排管,96孔PCR板磁力架
- 2.5 浮点数的表示及运算(浮点数表示、规格化)
- 标准化API设计的重要性
- Discuz修改LOGO
- tsd3dmapper软件使用方法_Mapper
- Gradle项目依赖管理
热门文章
- Linux下的IPC机制
- IBM主机增加“交易实时分析”新能力
- 127.0.0.1和localhost和本机IP三者的区别
- angualrjs学习总结二(作用域、控制器、过滤器)
- c语言:编写一个输出链表的函数print
- com.alibaba.dubbo.rpc.RpcException: Since you are
- Xslt中的Xsl:copy与Xsl:copy-of的区别
- 比Google Map更加清晰的网络地图——RealBird
- 【SpringBoot_ANNOTATIONS】 生命周期 02 实现InitializingBean, DisposableBean接口
- 机虚拟磁盘附加到计算机上,Hyper-V 怎样拷贝文件至虚拟硬盘并附加到虚拟机上...