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是一个进程管理工具,官方的说法: 用途就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断.当进程中断的时候我希望能自动重新启动它,此时,我就需要使用到了 ...
随机推荐
- 简说Python生态系统的14年演变
[导语]Python 里各种丰富的标准库.第三方库和模块成为其广受欢迎的原因之一.而 PyPI 就是大家想第三方库前先要安装的一个仓库.作为使用者,它可以帮我们查找 Python 社区开发和共享的软件 ...
- Python之Scripy框架
为什么要用到cmd界面 --- 在这里操作的是Scripy框架的指令,不是Python代码 Parse --- Scripy的回调函数 fiddler --- 用于爬取JS存储数据的页面 项目: 1. ...
- July 12th, 2018. Thursday, Week 28th.
People love what other people are passionate about. 人总是会爱上别人倾注热情的事物. From La La Land. This quote has ...
- iis问题
1.8.5版本的iis配置完成,不能打开网页显示503.原因是应用程序池,加载用户配置文件失败,然后应用程序池关闭了.关闭它就可以正常打开了. server2008,打不开网页,打开url显示目录的原 ...
- 搭建ES6开发环境
https://github.com/IOJINDD/ES6-dev 在gulpfile最后一行加上: gulp.task('default', ['compile-es6', 'pack-js', ...
- 【转】C# 定时器事件(设置时间间隔,间歇性执行某一函数,控制台程序)
using System.Timers;定时器事件代码 static void Main(string[] args) { Method(); #region 定时器事件 Timer aTimer = ...
- Mac下开发ASP.NET Core应用,我用FineUICore!
在 Mac 下开发 ASP.NET Core 2.0+ 应用,我用FineUICore! FineUICore:企业级 ASP.NET 控件库,10年持续更新,只为你来:http://fineui.c ...
- TypeError: argument 1 must be an integer, not _subprocess_handle/OSError: [WinError 87]
Error Msg: Traceback (most recent call last): File "c:\python27\lib\site-packages\celery\worker ...
- jeecg入门操作—模板配置(录入界面)
点击online表单的模板配置,进入模板设计列表页面,点击创建模板 点击创建模板 点击激活 设计完成,点击激活(表单模板可以多个,激活状态只能有一个) 激活后,重新加入功能测试,点击添加页面,效果如下 ...
- C# 查看EF生成的SQL语句
用sqlsever追踪最后的sql语句. 返回IQueryable<T>类型, 里面封装的就是生成的SQL脚本,设置断点queryable = DataContext.Set<T&g ...