2020年年后工作中需开发一支持多数据源自动上报业务数据的程序,程序开发完部署上线时需要对其进程进行自动管理,不然哪天程序down了还不知,可就麻烦了,所以这里选用了强大的supervisor,以下文章为学习及实操时的笔记,不正确处请指出

Supervisor简介

Supervisor官网:http://supervisord.org

Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警。

supervisor还提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程。

supervisor安装

1. pip安装方式

[maaiqiang@localhost ~]$ pip install supervisor

2. 离线包安装方式 ( 下载离线包https://pypi.org/project/supervisor/#files)

[maaiqiang@localhost ~]$ ls

supervisor-4.2.0.tar.gz

[maaiqiang@localhost ~]$ tar xf supervisor-4.2.0.tar.gz

[maaiqiang@localhost ~]$ cd supervisor-4.2.0

[maaiqiang@localhost ~]$ python setup.py install

3. 等等

supervisor.conf配置文件说明

[unix_http_server]

file=/tmp/supervisor.sock ;UNIX socket 文件,supervisorctl 会使用

;chmod=0700 ;socket文件的mode,默认是0700

;chown=nobody:nogroup ;socket文件的owner,格式:uid:gid

;[inet_http_server] ;HTTP服务器,提供web管理界面

;port=127.0.0.1:9001 ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性

;username=user ;登录管理后台的用户名

;password=123 ;登录管理后台的密码

[supervisord]

logfile=/tmp/supervisord.log ;日志文件,默认是 $CWD/supervisord.log

logfile_maxbytes=50MB ;日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小

logfile_backups=10 ;日志文件保留备份数量默认10,设为0表示不备份

loglevel=info ;日志级别,默认info,其它: debug,warn,trace

pidfile=/tmp/supervisord.pid ;pid 文件

nodaemon=false ;是否在前台启动,默认是false,即以 daemon 的方式启动

minfds=1024 ;可以打开的文件描述符的最小值,默认 1024

minprocs=200 ;可以打开的进程数的最小值,默认 200

[supervisorctl]

serverurl=unix:///tmp/supervisor.sock ;通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致

;serverurl=http://127.0.0.1:9001 ; 通过HTTP的方式连接supervisord

; [program:xx]是被管理的进程配置参数,xx是进程的名称

[program:xx]

command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ; 程序启动命令

autostart=true ; 在supervisord启动的时候也自动启动

startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒

autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启

startretries=3 ; 启动失败自动重试次数,默认是3

user=tomcat ; 用哪个用户启动进程,默认是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=/opt/apache-tomcat-8.0.35/logs/catalina.out

stopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程

killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程

;包含其它配置文件

[include]

files = relative/directory/*.ini ;可以指定一个或多个以.ini结束的配置文件

supervisor配置

1. 通过运行echo_supervisord_conf 程序生成supervisor的初始化配置文件

[maaiqiang@localhost ~]$ mkdir /etc/supervisor

[maaiqiang@localhost ~]$ echo_supervisord_conf > /etc/supervisor/supervisored.conf

2. 编辑 /etc/supervisor/supervisored.conf,在文件结尾处追加如下配置

;conf.d 为配置表目录,需要手动创建,方便各子进程配置管理

[include]

files = conf.d/*.conf

3. 创建conf.d目录

[maaiqiang@localhost ~]$ mkdir /etc/supervisor/conf.d

4. 为你的程序创建一个.conf文件子进程配置文件,放在目录"/etc/supervisor/conf.d/"下

[maaiqiang@localhost ~]$ vi UmsScheduler.conf

[program:UmsScheduler]

command=/usr/bin/python /home/mq/ums/py/UmsMonitor/UmsScheduler.py

directory=/home/mq/ums/py/UmsMonitor/

autostart=true

autorestart=true

stderr_logfile=/home/mq/ums/py/UmsMonitor/log/UmsScheduler-err.log

stdout_logfile=/home/mq/ums/py/UmsMonitor/log/UmsScheduler-out.log

user=mq

5. 运行supervisord,查看是否生效

[maaiqiang@localhost ~]$ supervisord -c /etc/supervisor/supervisord.conf

6. supervisor配置开启自启动

6.1. 新建/usr/lib/systemd/system/supervisord.service文件

# dservice for systemd (CentOS 7.0+)

# by ET-CS (https://github.com/ET-CS)

[Unit]

Description=Supervisor daemon

[Service]

Type=forking

ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf

ExecStop=/usr/bin/supervisorctl shutdown

ExecReload=/usr/bin/supervisorctl reload

KillMode=process

Restart=on-failure

RestartSec=42s

[Install]

WantedBy=multi-user.target

6.2.执行以下命令,方便进行管理

[maaiqiang@localhost ~]$ systemctl enable supervisord.service # 加入开启自启动项

[maaiqiang@localhost ~]$ systemctl is-enabled supervisord #检查是否为开启启动项

[maaiqiang@localhost ~]$ systemctl start supervisord.service # 启动并加载默认配置文件

7. 验证supervisord进程是否启动

[maaiqiang@localhost ~]$ ps -ef | grep 'supervisord'

8. 验证UmsScheduler子进程是否启动

[maaiqiang@localhost ~]$ ps -ef | grep 'UmsScheduler'

这里,可以模拟发生异常将其进程杀死,查看其进程是否能够自动启动

supervisor管理命令说明

supervisorctl status # 查看所有进程的状态

supervisorctl stop UmsScheduler # 停止UmsScheduler

supervisorctl start UmsScheduler # 启动UmsScheduler

supervisorctl restart UmsScheduler # 重启UmsScheduler

supervisorctl update # 配置文件修改后使用命令加载新的配置

supervisorctl reload # 重新启动配置中的所有程序

supervisor 守护多个进程_supervisor守护进程管理实操笔记相关推荐

  1. 实验2linux进程控制与通信,实验2 进程控制与通信管理word文档良心出品

    <实验2 进程控制与通信管理word文档良心出品>由会员分享,可在线阅读,更多相关<实验2 进程控制与通信管理word文档良心出品(13页珍藏版)>请在人人文库网上搜索. 1. ...

  2. Python 多进程笔记 — 启动进程的方式、守护进程、进程间通信、进程池、进程池之间通信、多进程生产消费模型

    1 面向过程启动多进程 Python 操作进程的类都定义在 multiprocessing 模块,该模块提供了一个 Process 类来代表一个进程对象,这个对象可以理解为是一个独立的进程,可以执行另 ...

  3. Linux 普通进程 后台进程 守护进程(转)

    一.普通进程与后台进程 默认情况下,进程是在前台运行的,这时就把shell给占据了,我们无法进行其它操作.对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个'& ...

  4. 并发 --- 31 进程锁 守护进程 进程队列

    一.进程的其他方法 1.   .name      进程名   (可指定) 2.  .pid     进程号 3.   os.getpid         在什么位置就是什么的进程号 4.   .is ...

  5. 普通进程的守护进程化

    前言 自定义一个daemon_init函数,涉及到知识点为"如何创建一个daemon(守护进程)",实现步骤如下: fork之后杀掉父进程(此时子进程被init收养)这是为了为下一 ...

  6. linux 守护进程_Linux 守护进程

    前言 Linux 平台下,经常需要程序脱离终端在后台运行,很多程序在启动的时候需要加 -d 参数,这一般代表以守护进程(后台进进程)的方式启动.那么怎么启动守护进程呢? 创建方式 //程序退出的默认动 ...

  7. Linux学习之系统编程篇:守护进程(精灵进程、后台进程)

    一.背景 一般情况下,启动终端(shell),系统会创建一个会话(shell 进程是会长),经过后续各种操作,该会话中会存在多个进程组,每个进程组中也会有多个进程(父进程是组长),若此时关闭 shel ...

  8. 浅析三种特殊进程:孤儿进程,僵尸进程和守护进程

    其实有时想想linux内核的设计也蕴含着很多人生哲学,在linux中有这么几个特殊进程中,我们一开始见到它们的名字可能还会觉得很诧异,但在了解完了原理后,我们仔细想想,这样的命名也不无道理!下面我就给 ...

  9. 【Linux系统编程】特殊进程之守护进程

    00. 目录 文章目录 00. 目录 01. 守护进程概述 02. 守护进程查看方法 03. 编写守护进程的步骤 04. 守护进程代码 05. 附录 01. 守护进程概述 守护进程(Daemon Pr ...

最新文章

  1. 如何获取汉字拼音首字母?一般用于通讯录
  2. 你不知道的Javascript之原型
  3. 如何去除本地文件与svn服务器的关联
  4. leetcode852. 山脉数组的峰顶索引(二分法)
  5. oracle用户登录报错,oracle用户登录报错-bash: ulimit: open files: cannot modify limit: Operation not permitted...
  6. 安卓intent发起广播事件给系统或当前app,并从系统或当前app中接收广播
  7. mac编写python_刚到手Mac写Python的一个简单问题
  8. bootstrap——强大的网页设计元素模板
  9. linux数字小键盘,银行工作者必备!小郭数字小键盘练习软件:免费数字键小键盘指法练习...
  10. 学习django笔记(天天生鲜)
  11. realtek高清晰音频管理器没有设备高级设置怎么设置音箱与耳机同时响
  12. 影视解说短视频制作教程,从找素材到配音,上手很简单
  13. 计算机家庭网络共享,Windows7创建家庭组实现多台电脑之间共享资源
  14. Java和C专项练习
  15. 腾讯云服务器备案全流程 40天备案的血与泪
  16. 明白了虹膜,你就知道人类为什么有如此多样的瞳色了
  17. 网络安全能力认证CCSC技术Ⅰ级认证培训
  18. 替换MP9486A 替代MP4689 替换LM5007 LM5017 国产芯片内置150V做降压恒压4.2V GPS防盗器专用芯片
  19. Linux配置JAVA环境变量(全部)
  20. 新嘉华上海会计师事务所为何是业界精英专家

热门文章

  1. matlab 2016b更改工作路径
  2. 矩阵推导后注意力机制居然是这样
  3. vue实战之前期准备
  4. kali-linux 完美解决sublime输入 中文
  5. 安装debian总结以及编译linux内核
  6. 【原创】用MySQL 生成随机密码-增加大写处理
  7. FTP服务器的防火墙通用设置规则
  8. ViewPager+RadioGroup实现标题栏切换,Fragment切换
  9. 参展神器| 算法告诉你优先参加哪个会展
  10. 隐藏讨厌的桌面挂载卷图标