[喵咪的Liunx(1)]计划任务队列脚本后台进程Supervisor帮你搞定

news/2024/7/3 18:04:24

喵咪的Liunx(1)]计划任务队列脚本后台进程Supervisor帮你搞定

前言

哈喽大家好啊,好久不见啊(都快一个月了),要问为什么没有更新博客呢只应为最近在录制PhalApi的视频教程时间比较少,作为弥补那么为大家带来一点干货Supervisor,话不多说那么就开始今天的分享把

附上:

喵了个咪的博客:w-blog.cn

Supervisor官网地址:https://pypi.python.org/pypi/supervisor

PhalApi官网地址:http://www.phalapi.net/

开源中国Git地址:http://git.oschina.net/dogstar/PhalApi/tree/release

1. 我们遇到了什么问题

了解python的童鞋应该听说过Supervisor,Supervisor是通过python实现的一个进程管理工具,

1.1需要一直运行到后台的可执行文件启动的服务

Supervisor是笔者在玩golang的时候了解到的,goalng的web应用API需要运行编译好的可执行文件才能把golang的内建web服务跑起来,和php不同的就是php-fpm会帮你解决这个问题,那么遇到这个问题后我找了很多资料在想我怎么可以让我的进程一直在后台启动并且如果有了问题自己死掉了自动重启呢.

从php的角度来说比如swoole你需要持续运行不依赖php-fpm是一个道理

第一个问题:

就是有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断。当进程中断的时候我希望能自动重新启动它

解决问题:

Supervisor设计出来的初衷就是用来解决,面对这类问题只需要简单的进行配置然后启动所有的事情都可以交给Supervisor来帮你完成

1.2队列脚本

说道队列脚本大家并不陌生,应为在很多场景下面都需要使用尤其是延时比较高的操作的时候(比如微信个推,消息推送,发送邮件,发送验证码)这些基本都是靠队列脚本处理来完成的,但是问题来了队列脚本也需要直接运行,并且在死掉了或者是异常退出了也需要启动起来,

在之前笔者是这么做的使用chontab+shell没过5秒跑一下shell然后shell监控一下脚本有没有死掉,如果死掉了就再次启动

第二个问题

就是有一个队列脚本需要运行

解决问题:

这个和第一个差不多只是场景不同但是需求是一样的都是需要运行一个常驻的后台进程

1.3计划任务和定时任务

在很多时候我们同样需要解决计划任务的问题比如晚上5点钟的时候统计数据,或者每个小时需要处理用户信息,那么这就需要用时计划任务和定时任务,在传统的实现方式上面使用chontab的计划任务和定时任务的偏多,但是如果当业务复杂了或者是动态的计划任务带有逻辑的时候就比较痛苦了

第三个问题

解决计划任务和定时任务

解决问题:

对于定时任务可以跑一个脚本在脚本内算出来我和这个时间还相差多少然后阻塞一定时间,当达到这个时间后那么进程结束,Supervisor会再次把你启动起来,但是解决复杂的定时任务或者是多个触发的可能就需要使用到一些辅助了比如node.js的异步swoole的异步能力

这个和第一个差不多只是场景不同但是需求是一样的都是需要运行一个常驻的后台进程

2. Supervisor安装和使用

Supervisor主要就两个命令:

supervisord : supervisor的服务器端部分,启动supervisor就是运行这个命令

supervisorctl:启动supervisor的命令行窗口。

安装(Centos):

yum install python-setuptools
easy_install supervisor
//如果easy_install不好使就从官方下载:
//然后通过python安装:
tar zxf supervisor-3.1.3.tar.gz
cd supervisor
python setup.py install

注意:python版本必须是2.x版本

生成配置文件(supervisord.conf):

echo_supervisord_conf > /etc/supervisord.conf

现在比如我需要添加一个需要运行的进程可以修改配置文件/etc/supervisord.conf在末尾加入如下内容:

//你需要启动的进程给个名字
[program:shadowsocks]
//你需要执行的语句
command=php /app/80/task/index.php xxxx
//是否自动启动
autostart=true
autorestart=true
//运行程序的用户
user=root

启动:

使用指定配置文件启动:supervisord -c /etc/supervisord.conf

使用默认配置文件启动:supervisord

启动之后大家可以使用supervisorctl status来获取当前运行的那些有进程

常用命令:

控制命令基本都通过supervisorctl执行,输入help可以看到命令列表。这是一些常用命令:

获得所有程序状态 supervisorctl status
关闭目标程序 supervisorctl stop spider
启动目标程序 supervisorctl start spider
关闭所有程序 supervisorctl shutdown

注意:如果修改了 /etc/supervisord.conf ,需要执行 supervisorctl reload 来重新加载配置文件

3. 总结

到这里关于supervisord的介绍就结束了,supervisord解决的常见的一些守护进程的问题,也可以使用到很多场景,那么在后面笔者会抽时间带来phalapi的supervisord计划任务队列脚本的拓展,多谢大家的支持!

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!


http://lihuaxi.xjx100.cn/news/244563.html

相关文章

[转] splice系列系统调用

关注splice系列系统调用(包括splice,tee和vmsplice)已经有一段时间了,开始的时候并未能领会splice的意义所在,致使得出了“splice系列系统调用不怎么实用”的错误结论。随着内核研究的深入,才逐渐懂得&…

页面上表格金额统计汇总

页面结构&#xff1a; <!-- 核销退房结算 --> <div id"div-checkout-id" class"row cl"> <label class"form-label col-sm-1"><span class"c-red">退房结算</span></label>…

Windows 消息循环(1) - 概览

本文从消息循环是如何驱动程序的这个角度&#xff0c;对 Windows 消息循环进行概览性介绍。 使用 EN5 课件获得更好的阅读体验&#xff1a; 【希沃白板5】课件分享 : 《Windows培训 - 消息循环》https://r302.cc/q2d1jB 点击链接直接预览课件 1 程序是怎么跑起来的&#xff1f;…

PostgreSQL 批量权限 管理方法

关于PostgreSQL的逻辑架构和权限体系&#xff0c;可以参考 https://yq.aliyun.com/articles/41210 本文将给大家介绍一下如何批量管理表&#xff0c;视图&#xff0c;物化视图的权限。 以及如何管理默认权限&#xff0c;批量赋予schema的权限。 对整个schema的对象进行权限管理…

sublime text3 前端插件介绍

Emmet插件 Emmet插件可以说是使用Sublime Text进行前端开发必不可少的插件 它让编写HTML代码变得极其简单高效 基本用法&#xff1a;输入标签简写形式&#xff0c;然后按Tab键 关于Emmet的更多介绍&#xff0c;请查看官方文档 这份速查表&#xff0c;可以帮你快速记忆简写形式 …

在SpringBoot中使用SpringDataRedis

SpringDataRedis应用&#xff1a; 说明&#xff1a; 关于Redis:一个基于键值对存储的NoSQL内存数据库&#xff0c;可存储复杂的数据结构&#xff0c;如List, Set, Hashes。 关于Spring Data Redis:简称SDR, 能让Spring应用更加方便配置和访问Redis。 1.在pom.xml加入以下依赖 &…

理解RESTful架构

越来越多的人开始意识到&#xff0c;网站即软件&#xff0c;而且是一种新型的软件。 这种"互联网软件"采用客户端/服务器模式&#xff0c;建立在分布式体系上&#xff0c;通过互联网通信&#xff0c;具有高延时&#xff08;high latency&#xff09;、高并发等特点。…

JavaScript 复习之数据类型

一、简介 JavaScript 的数据类型有 7 种&#xff1a; 数值&#xff08;number&#xff09;字符串&#xff08;string&#xff09;布尔值&#xff08;boolean&#xff09;undefinednull对象&#xff08;object&#xff09;Symbol&#xff08;ES6 中新增的类型&#xff0c;表示独…