[喵咪的Liunx(1)]计划任务队列脚本后台进程Supervisor帮你搞定
喵咪的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计划任务队列脚本的拓展,多谢大家的支持!
注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!
[喵咪的Liunx(1)]计划任务队列脚本后台进程Supervisor帮你搞定相关推荐
- Shell脚本详解---一篇搞定
有道云分享链接 1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具, Linux/UNIX系统的底层及基础应用软件的核心大都 ...
- python编写梦幻脚本_利用Python实现FGO自动战斗脚本!梦幻西游也一样搞定
Fate/Grand Order(非的肝不过欧的)作为索尼为了拯救自己不倒闭而开发的面向月厨的骗氪养成抽卡爆肝游戏,居然没有像隔壁<阴阳师>的自动战斗系统(看看别人现在都自带脚本了).毕竟 ...
- [喵咪BELK实战(2)] elasticsearch+kibana搭建
[喵咪BELK实战(2)] elasticsearch+kibana搭建 前言 上一节我们介绍了日志系统和BELK之后就要到激动人心的安装环境了,实践出真知都知道日志系统很重要只有把它搭建起来才有效果 ...
- 【学习笔记】薛定谔的喵咪Cat—球盒问题(全详解)
[学习笔记]薛定谔的喵咪Cat-球盒问题(全详解) 传送门:薛定谔的喵咪 \(Luogu-U77460\)(自自上传的题目,数据略水,尤其是 \(opt=9\) ,以后找时间补上) [题目描述] 当一 ...
- [喵咪开源软件推荐(4)]Liunx跑分神器-unixbench
[喵咪开源软件推荐(4)]Liunx跑分神器-unixbench 哈喽大家好呀! 这次给大家带来一个Liunx跑分神奇,在笔者在老早之前有听到一则传闻,阿里云相同的配置性能有差异 有的是X5的有的是E ...
- [喵咪Liunx(4)Monit进程监控
[喵咪Liunx(4)Monit进程监控 前言 有一段时间没有更新博客了,最近因为公司项目全球化以及最近慢慢在偏向学习团队管理忙的有点不可开交了,不过这次要给大家带来两篇关于Liunx日常开发维护管理 ...
- [喵咪Redis]Redis安装与介绍
[喵咪Redis]Redis安装与介绍 前言 哈喽大家好啊,这次要来和大家一起来了解学习Redis的一系列技术,最终目的是搭建一个高可用redis集群自动负载灾备,那我们先从最基础的Redis的一些基 ...
- [喵咪软件推荐(1)]全球国家信息库
[喵咪软件推荐(1)]全球国家信息库 前言 哈喽大家好啊!今天又来刨坑了,这次给大家带来的是软件推荐系列,主要是把一些特别好用的一些软件推荐给大家并且分析使用场景以及用法,今天要给大家介绍的一个类软件 ...
- [喵咪开源软件推荐(6)]TCP链路加速技术KcpTun
[喵咪开源软件推荐(6)]TCP链路加速技术KcpTun 今天有给大家带来新的东西KcpTun,KcpTun是利用Kcp技术对Tcp链路传输进行加速,大家熟知的网络协议一般是UDP和TCP,UDP传输 ...
最新文章
- 急需降低系统复杂性,我们从 Kafka 迁移到了 Pulsar
- C++__conversion function,Non-explicit one argument constructor
- 什么是优秀管理者的第一课?【如何搞垮一个企业】
- 自考计算机本科学校好,自考本科的难度跟选择的专业有关吗?过来人:有很大的关系...
- [Xcode 实际操作]七、文件与数据-(3)创建文本文件、属性列表文件、图片文件
- Nginx和lvs在负载均衡方面的对比
- Oracle取最大/最小值函数
- 1.0jpa 2.0_Java EE 7之前版本替代JPA 2.1非同步持久性上下文
- mac自己定义tree命令
- Emulator: PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT
- 曾断崖式跌落的三星,能否在中国东山再起?
- io里没有driveinfo没有_来福宝宝,愿天堂里没有病痛
- ORA-27125: unable to create shared memory segment
- Android插件框架VirtualAPK学习和使用
- app前后台交互php_PHP分布式架构RPC介绍以及手写RPC框架
- 是男人就下100层【第二层】——帮美女更衣(2)
- Cell:PopCOGenT鉴定微生物基因组间的基因流动
- Golang defer、panic和recover
- 中国数据中心最新规划图,中国数据中心建设情况
- Unity3D FPS游戏之子弹贴图
热门文章
- #实现互联网聊天_局域网内两台电脑如何实时语音聊天通话
- 静态常量放在什么包里面_在沙雕游戏里面用表情包打架,是一种什么体验
- Java项目:健身器材商城系统(java+Jdbc+Servlet+Ajax+Fileupload+mysql)
- Java项目:教务管理系统(java+JSP+Spring+SpringBoot+layui+maven)
- 征途linux mysql_MySql征途之mysql常用命令
- dev treeview控件_在Winform开发框架中使用DevExpress的TreeList和TreeListLookupEdit控件
- React 组件绑定点击事件,并且传参完整Demo
- javascript中this那些事
- apache 开启 gzip 压缩服务
- Eclipse优化之设置不自动弹出控制台和Server