Python进程管理神器——Supervisor

🚀 优质资源分享 🚀

学习路线指引(点击解锁)知识定位人群定位
🧡 Python实战微信订餐小程序 🧡进阶级本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。
💛Python量化交易实战💛入门级手把手带你打造一个易扩展、更安全、效率更高的量化交易系统

一、简介

Supervisor 是一款 Python 开发的进程管理系统,允许用户监视和控制 Linux 上的进程,能将一个普通命令行进程变为后台守护进程,异常退出时能自动重启
详细介绍查阅:Supervisor Introduction

二、安装

Supervisor 支持 Linux 和 Mac,不支持 Windows
本文系统为: centos,supervisor==4.2.4

pip3 install supervisor

安装完成后,在Python bin目录下面会有这样几个文件。

ls /usr/local/Python38/binecho_supervisord_conf
supervisorctl
supervisord

:由于python bin目录是加入了环境变量,所以可以直接执行这几个文件。

三、创建配置文件

  1. 首先建个目录,存放配置文件:mkdir supervisord
echo_supervisord_conf > supervisord/supervisord.conf

若报错 -bash: /etc/supervisord.conf: Permission denied,需要切换到 root用户。

  1. 创建子进程配置文件路径
mkdir -p supervisor/conf.d

后面我们的任务,我们想把它作为守护进程,都需要一个配置文件,我们把这些配置文件放在conf.d目录下面。

  1. 修改配置文件
vim supervisord/supervisord.conf

将最后一部分改为

[include]
# 因为我这里是放在root用户目录下,也可以放其它目录
files=/root/supervisord/conf.d/*.conf

四、初试

  1. 启动 supervisord
supervisord -c supervisord/supervisord.conf

这样就把supervisord启动了,我们接下来可以把我们的任务交给他去守护了,停止了会帮我们自动重启。

查看版本

supervisord -v
  1. 编写简单的 Shell 脚本
vim supervisord/test.sh

内容如下

#!/bin/bash
while : 
doecho `date '+%Y-%m-%d %H:%m:%S'`sleep 1
done

简单运行,Ctrl + C 退出

  1. 创建子进程配置文件
vim supervisor/conf.d/test.conf

test.conf内容如下:

[program:test]
command=sh /root/supervisord/test.sh
priority=999                              ; 相对启动优先级,数值越小越优先,默认为999
autostart=true                            ; 在supervisor启动时自动启动,默认为true
autorestart=true                          ; 在意外退出时重新启动,默认为true
startsecs=10                              ; 子进程启动多少秒后状态为running则认为启动成功,默认为1
startretries=3                            ; 尝试启动的最大次数,默认为3
exitcodes=0,2                             ; 进程的预期退出代码列表,默认为0
stopsignal=QUIT                           ; 终止进程的信号,默认为TERM
stopwaitsecs=10                           ; 在SIGKILL之前等待的最大秒数,默认为10
user=root                                 ; 在某用户下设置uid来启动程序,默认不切换用户
redirect\_stderr=true                      ; 是否重定向stdout和stderr,默认为false
stdout\_logfile=/tmp/supervisor.stdout.log  ; stdout的输出文件,默认为AUTO
stdout\_logfile\_maxbytes=50MB              ; stdout最大文件大小,默认为50MB
stdout\_logfile\_backups=10                 ; stdout文件备份数,设为0则不备份,默认为10

其实只需要配置3个参数,其它不用管:

  • command=sh /root/supervisord/test.sh: 我们的子进程启动命令;
  • stdout_logfile=/tmp/supervisor.stdout.log: 日志;
  • program:test:进程名为test,如果进程哪一天想停止启动等,需要进程名;

目前文件目录结构是这样的:

yum install tree
tree supervisordsupervisord
├── conf.d
│   └── test.conf
├── supervisord.conf
└── test.sh
  1. 重新读取配置并更新子进程

因为我们的supervisord已经启动了,可以通过ps -ef | grep supervisord.conf查看。添加了子进程配置文件,需要把它重新加载进来:

先进入supervisord目录: cd supervisord,否则执行下面命令会有问题。

supervisorctl reread

再次查看进程状态

supervisorctl status

结果:

test     RUNNING   pid 30278, uptime 1:29:41

名为test的这个进程已经作为守护进程在后台运行,我们来kill掉他:

kill 30278

再执行supervisorctl status,会发现状态立马由starting,不一会变成running,那么supervisord的作用已经很明显了,可以自动帮我们自动监控任务。

:对于子进程的添加、删除、启动、停止相关命令,见附录。

五、Web 界面

web界面没多大用处,就是如果想启动、暂停进程是,不需要敲命令而已。

vim supervisord.conf

取消注释

[inet\_http\_server]
port=*:9001                ; 此处改为*便于调试

重启 supervisord

supervisorctl reload

浏览器访问:linux_ip:9001.

附录:supervisorctl 常用命令

新增某配置文件,重新加载

supervisorctl reread

改动某配置文件,重新加载

supervisorctl update

重启 supervisord

supervisorctl reload

查看所有进程状态

supervisorctl status

查看指定进程状态

supervisorctl status 

启动所有子进程

supervisorctl start all

启动指定子进程

supervisorctl start <name>

重启所有子进程

supervisorctl restart all

重启指定子进程

supervisorctl restart <name>

停止所有子进程

supervisorctl stop all

停止指定子进程

supervisorctl stop <name>

添加子进程到进程组

supervisorctl add 

从进程组移除子进程,需要先stop。注意:移除后,需要使用reread和update才能重新运行该进程

supervisorctl reomve <name>

欢迎访问我的个人博客,听听我的故事。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400706.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web API核查表:设计、测试、发布API时需思考的43件事

当设计、测试或发布一个新的Web API时&#xff0c;你是在一个原有的复杂系统上构建新的系统。那么至少&#xff0c;你也要建立在HTTP上&#xff0c;而HTTP则是基于TCP/IP创建的、TCP/IP建立在一系列的管道上。当然&#xff0c;你也需要考虑Web服务器、应用程序框架或者是API框架…

[JSOI2007]文本生成器

1030: [JSOI2007]文本生成器 Time Limit: 1 Sec Memory Limit: 162 MBhttp://www.lydsy.com/JudgeOnline/problem.php?id1030Description JSOI交给队员ZYX一个任务&#xff0c;编制一个称之为“文本生成器”的电脑软件&#xff1a;该软件的使用者是一些低幼人群&#xff0c;他…

面试问题整理笔记系列 一 Java容器类

虚线框表示接口&#xff1b;实线框表示实体类&#xff1b;粗线框表示最常用的实体类&#xff1b;虚线箭头表示实现了这个接口&#xff1b;实现箭头表示类可以制造箭头所指的那个类的对象。 Collection&#xff1a;只允许在每一个位置上放一个对象。它包括“以一定顺序持有一组对…

【 Grey Hack 】反向Shell

目录调查准备反向shell反向shell提权版本&#xff1a;Grey Hack v0.7.3618 - Alpha 如图&#xff0c;本案例中目标IP尚未开放常见端口 调查 通过路由器获得目标PC的用户邮箱账号和相应的Password 所用脚本介绍&#xff1a; routerpsw 准备反向shell 在本机获得root后配置r…

leetcode------Word Search

标题&#xff1a;Word Search通过率&#xff1a;20.0%难度&#xff1a;中等Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horiz…

阈值PSI代码

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

离散化求RECT1

本文转载至点击打开链接 #include<stdio.h> struct node{int x1,y1,x2,y2,c; }; struct node s[1010]; int px[2010],py[2010],ux[10010],uy[10010],p[10000]; short a[2010][2010],c[2510]; int main(){int i,j,k,m,n; scanf("%d%d%d",&n,&m,&k);…

对IplImage 结构体的理解

1 typedef struct _IplImage 2 { 3 int nSize; /* IplImage大小 */ 4 int ID; /* 版本 (0)*/ 5 int nChannels; /* 大多数OPENCV函数支持1,2,3 或 4 个通道 */ 6 int alphaChannel; /* 被OpenCV忽略 */ …

【 Grey Hack 】万金油脚本:原地提权工具

目录脚本源码用法效果及示例版本&#xff1a;Grey Hack v0.7.3618 - Alpha 脚本源码 metaxploit include_lib("/lib/metaxploit.so") if not metaxploit thenmetaxploit include_lib(current_path "/metaxploit.so") end if if not metaxploit then ex…

可落地的DDD(7)-战术设计上的一些误区

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

android之PackageManager简单介绍

PackageManager相关 本类API是对全部基于载入信息的数据结构的封装&#xff0c;包含下面功能&#xff1a; 安装&#xff0c;卸载应用查询permission相关信息 查询Application相关信息(application&#xff0c;activity&#xff0c;receiver&#xff0c;service&#xff0c;prov…

【 Grey Hack 】万金油脚本:常见端口修改Password

目录脚本源码用法效果及示例版本&#xff1a;Grey Hack v0.7.3618 - Alpha 适用于SSH (22) 端口、FTP (21) 端口、HTTP (80) 端口、SMTP (25) 端口及3306/3307 端口等。 脚本源码 if params.len ! 2 or params[0] "-h" or params[0] "--help" then exi…

IPMI远程管理一点记录

http://www.07net01.com/storage_networking/IPMIyuanchengguanliyidianjilu_53093_1357975254.html转载于:https://www.cnblogs.com/diyunpeng/p/7001649.html

mysql INFORMATION_SCHEMA COLUMNS 解释

参考地址&#xff1a; http://dev.mysql.com/doc/refman/5.1/zh/information-schema.html#columns-table标准名称 SHOW名称 注释 TABLE_CATALOG 表目录 TABLE_SCHEMA 表架构 TABLE_NAME 表名 COLUMN_NAME Field 列名 ORDINAL_POSITION 列位置…

JavaScript中的原型和对象机制

1 对象相关的一些语言特性1.1 一切皆为对象JavaScript里所有的东西都是对象. 对象是属性的集合. 数字, 字符串, 布尔值等原始值是"伪对象", 它们同样拥有属性, 但是是在栈上分配并按值传递. 而其他的对象是堆上分配并按引用传递.一个很重要的概念是, 函数也是对象, 能…

【 Grey Hack 】记一次被黑经历

目录又被搞了版本&#xff1a;Grey Hack v0.7.3618 - Alpha 胆大包天的我黑进游戏内shop的IP后&#xff0c;顺着其上面的日志溯源到不少疑似其他玩家租的服务器&#xff0c;暂时没什么进展 不久后回到桌面才发现自己已经被黑入了 随后我打开日志查看记录 只看清是从我的1222…

iec61850采样协议(9-1、9-2)解析(一)

1 /*2 *3 * iec61850sv_protocol.h4 *5 * iec61850采样协议&#xff08;9-1、9-2&#xff09;解析。6 *7 *8 * 本代码支持win32平台和linux平台。9 *10 * Copyright (c)2012,lizhi<ibox>11 *12 * 2012-10-10 V1.0 lizhi<QQ:252240557,msn:ddgooohotmail.co…

C#即时释放内存

using System;using System.Diagnostics;using System.Runtime.InteropServices;[DllImport("kernel32.dll")]private static extern bool SetProcessWorkingSetSize(IntPtr process, int minSize, int maxSize);/// <summary>/// 即时释放内存/// </summar…

【 Grey Hack 】加强版nmap

目录probe使用方法效果routerpcscan使用方法效果版本&#xff1a;Grey Hack v0.7.3618 - Alpha probe if params.len ! 1 or params[0] "-h" or params[0] "--help" then exit(command_info("<b>probe [IP]</b>")) if not is_va…

文档容器iOS网络编程-iCloud文档存储编程实例

在本文中,我们主要绍介文档容器的容内,自我感觉有个不错的建议和大家分享下 iCloud文档存储程编对相键值据数存储而言比较复杂&#xff0c;涉及到自定义文档类、取得iCloud文档录目、找查Ubiquity容器中的文档、保存文档和决解文档冲突等容内。 实例&#xff1a;iCloud文档存储…