Linux进程管理工具Supervisor
简述
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。
也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。
安装
Debian / Ubuntu可以直接通过apt安装:$ sudo apt-get install supervisor
配置文件
目录结构
supervisor
├── conf.d
│ └── echo_time.conf -- 业务配置文件
└── supervisord.conf -- 主配置文件,一般不需要改动
使用
apt-get安装后,supervisor的主配置文件在/etc/supervisor/supervisord.conf子进程配置文件在
/etc/supervisor/conf.d/*.conf
supervisord 和 supervisorctl的关系
supervisord 是主进程
常用命令
# 使用默认的配置文件 /etc/supervisord.conf
supervisord
# 明确指定配置文件
supervisord -c /etc/supervisord.conf
# 使用 user 用户启动 supervisord
supervisord -u user
服务命令
- 查看服务状态:
sudo systemctl status supervisor.service - 开启服务:
sudo systemctl start supervisor.service - 停止服务:
sudo systemctl stop supervisor.service - 重启服务:
sudo systemctl restart supervisor.service - 开机启动项:
sudo systemctl enable supervisor.service
- 查看服务状态:
supervisor.service文件[Unit]
Description=Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target [Service]
ExecStart=/usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl -c /etc/supervisor/supervisord.conf $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=50s [Install]
WantedBy=multi-user.target
supervisorctl 是客户端程序
用于向supervisord服务发起命令。
所有命令,通过
supervisorctl -h可以查看帮助说明sudo supervisorctl help default commands (type help <topic>):
=====================================
add exit open reload restart start tail
avail fg pid remove shutdown status update
clear maintail quit reread signal stop version
控制子进程命令
# 停止某一个进程,program_name 为 [program:x] 里的 x
supervisorctl stop program_name
# 启动某个进程
supervisorctl start program_name
# 重启某个进程
supervisorctl restart program_name
# 结束所有属于名为 groupworker 这个分组的进程 (start,restart 同理)
supervisorctl stop groupworker:
# 结束 groupworker:name1 这个进程 (start,restart 同理)
supervisorctl stop groupworker:name1
# 停止全部进程,注:start、restart、stop 都不会载入最新的配置文件
supervisorctl stop all
# 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程
supervisorctl reload
# 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
supervisorctl update
修改进程配置文件后,只要
sudo systemctl restart supervisor.service则会自动加载哦
示例
以简单的
/home/www/python/echo_time.sh为例#/bin/bash while true;
do
echo `date +%Y-%m-%d,%H:%m:%s`
sleep 2
done
在
/etc/supervisor/conf.d/新增子进程配置文件echo_time.conf; /etc/supervisor/conf.d/echo_time.conf [program:echo_time] command = /usr/bin/env sh /home/www/python/echo_time.sh
directory = /home/www/python
user = www
startsecs = 3 redirect_stderr = true
stdout_logfile_maxbytes = 50MB
stdout_logfile_backups = 10
stdout_logfile = /home/www/python/log/echo_time.log
然后启动程序:
$ supervisorctl reread
$ supervisorctl update
这两个命令分别代表重新读取配置、更新子进程组
这样刚才添加的
echo_time脚本就常驻运行起来了。可以通过日志查看运行情况:tail -f log/echo_time.log
2018-12-22,22:12:1545490695
2018-12-22,22:12:1545490697
2018-12-22,22:12:1545490699
2018-12-22,22:12:1545490701
也可以使用
sudo supervisorctl status查看子进程运行情况:sudo supervisorctl status
echo_time RUNNING pid 28906, uptime 0:08:36
web界面操作
需要开启主配置文件
supervisord.conf注释掉的这4行 (/etc/supervisor/supervisord.conf)[inet_http_server] ; inet (TCP) server disabled by default
port=*:9001 ; (ip_address:port specifier, *:port for ;all iface)
;username=www ; (default is no username (open server))
;password=www123456 ; (default is no password (open server))
注意:如果修改配置文件时, [inet_http_server]这一行被注释,会导致不仅web需要认证,命令行使用 supervisorctl也需要认证,这时候就需要在交互式命令行里输入用户名、密码才能进行下一步的操作。
浏览器访问:
http://myip:9001,输入用户名、密码后,即可看到web页面:

遇到的错误
Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord
监控工具
参考
- unix:///var/run/supervisor.sock no such file on Ubuntu 16.04
- How To Use Systemctl to Manage Systemd Services and Units
- Supervisor使用教程
- python supervisor使用
Linux进程管理工具Supervisor的更多相关文章
- Linux进程管理工具Supervisor的安装配置
目录 Linux进程管理工具Supervisor的安装配置 简介 安装Python包管理工具 安装Supervisor 配置 配置文件参数说明 配置进程管理 启动supervisor 控制进程 交互终 ...
- Linux进程管理工具——supervisor
介绍 Supervisord是用Python实现的一款非常实用的进程管理工具 安装 这里用源码 supervisor-.tar.gz .tar.gz cd supervisor- sudo pytho ...
- 进程管理工具supervisor
1. 简介 supervisor有两个组件:supervisord和supervisorctl,组成了client/server结构. supervisord负责读入配置文件,然后supervisor ...
- Linux进程管理工具
Linux进程管理工具 Htop yum install htop 参考帮助: http://blog.csdn.net/skh2015java/article/details/53173896 Li ...
- linux 使用进程管理工具 supervisor
1.supervisor是使用python进行开发的运行在linux服务器上的进程管理工具 老版本的supervisor需要运行在python2环境,如果需要使用supervisor管理python3 ...
- Python 进程管理工具 Supervisor 使用教程
Supervisor 是基于 Python 的进程管理工具,只能运行在 Unix-Like 的系统上,也就是无法运行在 Windows 上.Supervisor 官方版目前只能运行在 Python 2 ...
- 进程管理工具Supervisor(一)简介与使用
Supervisor是用Python开发的一套client/server架构的进程管理程序,能做到开机启动,以daemon进程的方式运行程序,并可以监控进程状态等等. linux进程管理方式有传统的r ...
- Linux 进程管理工具 supervisord 安装及使用
Supervisor是用Python实现的一款非常实用的进程管理工具 1.安装过程非常简单 安装python 安装meld3-0.6.8.tar.gz 安装supervisor-3.0a12.tar. ...
- Linux进程管理工具 Supervisord 的安装 及 入门教程
Supervisor是一个进程管理工具,官方的说法: 用途就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断.当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了 ...
随机推荐
- 经度和纬度在SQL中的数据类型
冬天太冷,等坐公司班车也很冷,就萌生了给班车做一个到站查询功能. 在某宝上买了汽车在线的GPS设备, 终生免费的服务的. 这里不得不提下这个设备的优点, 它提供API接口,还是免费的. 所以在班车上装 ...
- js得到规范的时间格式函数,并调用
1.js得到规范的时间格式函数 Date.prototype.format = function(fmt) { var o = { "M+" : this.getMonth()+1 ...
- kali中的postgres怎么连接
metasploit,默认使用的是postgresql数据库.在BT5或是Kali等专业的渗透系统中,postgresql已经被默认安装. 执行msfdb init会自动创建一个默认的用户名密码都是m ...
- vue打包发布在spingboot项目中 vue-router路由的处理
(原) 以下例子springboot后端地址为:localhost:7080/pingandai vue前端地址为:locahost:8080/pingandai/ 1.如果路由模式设置的是histo ...
- Codeforces #550 (Div3) - G.Two Merged Sequences(dp / 贪心)
Problem Codeforces #550 (Div3) - G.Two Merged Sequences Time Limit: 2000 mSec Problem Description T ...
- 【js】Number与数组
定义和用法 Number() 函数把对象的值转换为数字. 语法 Number(object):参数必须是对象 如果参数是 Date 对象,Number() 返回从 1970 年 1 月 1 日至今的毫 ...
- 安装WebLogic失败,出现”[VALIDATION] [ERROR]:INST-07004: Oracle 主目录(O) 位置包含一个或多个无效字符“解决方案
题如图 解决方案: 在管理员cmd窗口定位到jdk bin目录,然后输入以下命令 java -jar F:\java\fmw_12.2.1.3.0_wls_quick_Disk1_1of1\fmw_1 ...
- 小小知识点(十三)——MATLAB中怎么保存和读取.mat文件
1.存储 利用save函数 save(filename) %将当前工作区中的所有变量保存在 MATLAB® 格式的二进制文件(MAT 文件)filename 中. save(filename,var ...
- Spring通过注释配置Bean2 关联关系
接着我们讲讲关联关系的配置,我们耳熟能详的MVC结构,Controller关联着Service,Service关联着UserRepository,接着上一节的代码,完成上诉功能 在Main方法里,我们 ...
- 1.nginx_add_after_body
语法: add_before_body uri;默认值: —配置段: http, server, location发起一个子请求,请求给定的uri,并且将内容追加到主题响应的内容之前. 语法: add ...