Meproc:简单高效的跨平台进程/任务管理工具

最近使用 Melang 语言写了一个 supervisor 相似服务Meproc来管理进程。
在这里插入图片描述

Meproc 有如下特性:

  • 使用 HTTP API 管理控制 Meproc 来管理进程
  • 跨平台,支持 UNIX/Linux 、Mac 、Windows 等平台
  • 支持 cron 类定时调度任务
  • 支持简单的任务间依赖关系
  • 支持原生的协程任务
  • 提供了Web管理界面
  • 无需安装,有 Melang 解释器即可,也有现成的 docker image 直接可用

使用示范:

首先启动 Meproc

melang meproc.m

默认监听127.0.0.1:8606

启动后我们可以启动一个仅执行一次的任务,拉起一组进程去 sleep 5 秒:

curl -XPUT http://127.1:8606/proc -d '{"name": "sleep1", "cmd": "sleep 5", "type": "once", "replica": 2}'

然后再启动一个一次性任务 sleep 5 秒,但这个任务是依赖于上一个任务(sleep1)的。

curl -v -XPUT http://127.1:8606/proc -d '{"name": "sleep2", "cmd": "sleep 5", "type": "once", "replica": 2, "deps": ["sleep1"]}'

我们也可以创建一个 cron 类型的定时任务,每分钟拉起一组进程,让他们 sleep 5 秒:

curl -v -XPUT http://127.1:8606/proc -d '{"name": "sleep2", "cmd": "sleep 5", "type": "cron", "cron": "* * * * *", "replica": 2}'

也可以查询当前运行中的进程有哪些,以及使用 API 下发的任务有哪些:

curl -v -XGET http://127.1:8606/proc

当然也支持停止任务:

curl -v -XDELETE http://127.1:8606/proc?name=sleep1

或者重启某个任务,例如:

curl -v -XPOST http://127.1:8606/proc?name=sleep2

示例

一起看一个完整的示例,我们可以在启动 Meproc 后,执行如下命令:

curl -v -XPUT http://127.1:8606/proc -d '{"name": "sleep1", "cmd": "sleep 5", "type": "once", "replica": 2}'

curl -v -XPUT http://127.1:8606/proc -d '{"name": "sleep2", "cmd": "sleep 5", "type": "once", "replica": 2, "deps": ["sleep1"]}'

curl -v -XPUT http://127.1:8606/proc -d '{"name": "sleep3", "cmd": "sleep 5", "type": "once", "replica": 2, "deps": ["sleep1", "sleep2"]}'

curl -v -XDELETE http://127.1:8606/proc?name=sleep1

curl -v -XPUT http://127.1:8606/proc -d '{"name": "sleep1", "cmd": "sleep 5", "type": "once", "replica": 2}'

curl -v -XPOST http://127.1:8606/proc?name=sleep1

curl -v -XPUT http://127.1:8606/proc -d '{"name": "sleep4", "cmd": "sleep 5", "type": "cron", "cron": "* * * * *", "replica": 2}'

随后我们就可以在 Meproc 的终端上看到如下输出:

11/01/2023 10:28:28 UTC [INFO]: Listen: 127.0.0.1:8606
11/01/2023 10:28:31 UTC [INFO]: Task sleep1 started
11/01/2023 10:28:31 UTC [INFO]: Task sleep1 stopped
11/01/2023 10:28:31 UTC [INFO]: Task sleep2 started
11/01/2023 10:28:32 UTC [INFO]: Task sleep1 started
11/01/2023 10:28:32 UTC [INFO]: Task sleep1 stopped
11/01/2023 10:28:32 UTC [INFO]: Task sleep1 started
11/01/2023 10:28:37 UTC [INFO]: Process 1533616 (sleep2:1) exit
11/01/2023 10:28:37 UTC [INFO]: Process 1533615 (sleep2:0) exit
11/01/2023 10:28:37 UTC [INFO]: Process 1533626 (sleep1:1) exit
11/01/2023 10:28:37 UTC [INFO]: Process 1533624 (sleep1:0) exit
11/01/2023 10:28:37 UTC [INFO]: Task sleep3 started
11/01/2023 10:28:42 UTC [INFO]: Process 1533685 (sleep3:0) exit
11/01/2023 10:28:42 UTC [INFO]: Process 1533686 (sleep3:1) exit
11/01/2023 10:28:45 UTC [INFO]: Task sleep4 started
11/01/2023 10:28:50 UTC [INFO]: Process 1533747 (sleep4:0) exit
11/01/2023 10:28:50 UTC [INFO]: Process 1533748 (sleep4:1) exit
11/01/2023 10:30:00 UTC [INFO]: Task sleep4 started
11/01/2023 10:30:05 UTC [INFO]: Process 1534633 (sleep4:0) exit
11/01/2023 10:30:05 UTC [INFO]: Process 1534634 (sleep4:1) exit
11/01/2023 10:30:20 UTC [INFO]: Task sleep4 stopped
11/01/2023 10:30:20 UTC [INFO]: Task sleep4 started
11/01/2023 10:30:25 UTC [INFO]: Process 1534878 (sleep4:0) exit
11/01/2023 10:30:25 UTC [INFO]: Process 1534879 (sleep4:1) exit
11/01/2023 10:30:32 UTC [INFO]: Task sleep4 stopped
11/01/2023 10:30:32 UTC [INFO]: Task sleep4 started
11/01/2023 10:30:37 UTC [INFO]: Process 1534999 (sleep4:0) exit
11/01/2023 10:30:37 UTC [INFO]: Process 1535000 (sleep4:1) exit
...

欢迎感兴趣的小伙伴访问 Meproc 的Github 仓库了解更多内容。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何打赢稳定性之战?

文章目录 前言为什么总会出现问题呢?如何证明你的稳定性做的有效果?既是持久战,也是防御战1. 提前建筑好防御工事2. 以攻为守3. 找外部支援和配合 前言 随着23年年末期间,各大厂争先恐后的出现的各种线上故障,一时间“…

highlight.js 实现搜索关键词高亮效果 ,显示匹配数量及切换显示功能

先看效果&#xff1a; 更新&#xff1a;增加切换显示 折腾了老半天&#xff0c;记录一下 注意事项都写注释了 代码&#xff1a; <template><div class"absolute-lt wh-full overflow-hidden p-10"><div style"width: 200px"><el-…

学网络必懂的华为CSS堆叠技术

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 厦门微思网络​​​​​​https://www.xmws.cn 华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle OC…

【Python数据分析系列】实现txt文件与列表(list)相互读写转换(源码+案例)

这是Python数据分析系列原创文章&#xff0c;我的第199篇原创文章。 一、问题 平时在做数据分析或者程序开发的时候&#xff0c;需要将中间的一些结果或最后的处理结果保存下来&#xff0c;比如保存为txt格式的文本文件&#xff0c;这就涉及列表与txt之间的一种读取和写入操作…

【LV13 DAY16 轮询与中断】

轮询实现按键实验 #include "exynos_4412.h"int main() {//GPX1_1设置为输入模式//GPX1.CONGPX1.CON & (~ (0XF<<4));while(1){if(!(GPX1.DAT&(1<<1))){printf("key pressed\n");while(!(GPX1.DAT&(1<<1)));}else{}}return…

1127: 矩阵乘积

题目描述 计算两个矩阵A和B的乘积。 输入 第一行三个正整数m、p和n&#xff0c;0<m,n,p<10&#xff0c;表示矩阵A是m行p列&#xff0c;矩阵B是p行n列&#xff1b; 接下来的m行是矩阵A的内容&#xff0c;每行p个整数&#xff0c;用空格隔开&#xff1b; 最后的p行是矩…

【期末不挂科-单片机考前速过系列P11】(第十一章:15题速过串行口的工作原理和应用)经典例题盘点(带图解析)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机速过系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏…

【模型评估 02】ROC曲线

二值分类器&#xff08;Binary Classifier&#xff09;是机器学习领域中最常见也是应用最广泛的分类器。评价二值分类器的指标很多&#xff0c;比如precision、recall、F1 score、P-R曲线等。相比而言&#xff0c;ROC曲线有很多优点&#xff0c;经常作为评估而知分类器最重要的…

增强FAQ搜索引擎:发挥Elasticsearch中KNN的威力

英文原文地址&#xff1a;https://medium.com/nerd-for-tech/enhancing-faq-search-engines-harnessing-the-power-of-knn-in-elasticsearch-76076f670580 增强FAQ搜索引擎&#xff1a;发挥Elasticsearch中KNN的威力 2023 年 10 月 21 日 在一个快速准确的信息检索至关重要的…

Servlet JSP-实现简单的登录功能

本篇文章讲解如何使用Servlet-JSP-实现简单的登录功能。我们在进行Servlet和JSP实现简单登录功能的过程中&#xff0c;首先通过Eclipse创建了一个Maven项目&#xff0c;这为我们的Web应用提供了良好的项目管理和依赖管理。接下来&#xff0c;我们解决了新建项目时可能出现的报错…

CDN内容分发网络

1、CDN的含义 1.1 什么是CDN&#xff1f; CDN是内容分发网络&#xff08;Content Delivery Network&#xff09;的缩写。它是一种通过将内容部署到全球各地的服务器节点&#xff0c;使用户能够快速访问和下载内容的网络架构。 简单来说&#xff0c;CDN通过将内容分发到离用户更…

鸿蒙应用开发学习:改进小鱼动画实现按键一直按下时控制小鱼移动和限制小鱼移出屏幕

一、前言 近期我在学习鸿蒙应用开发&#xff0c;跟着B站UP主黑马程序员的视频教程做了一个小鱼动画应用&#xff0c;UP主提供的小鱼动画源代码仅仅实现了移动组件的功能&#xff0c;还存在一些问题&#xff0c;如默认进入页面是竖屏而页面适合横屏显示&#xff1b;真机测试发现…

【纯CSS特效源码】(二)精美的立体字

1.漂浮感立体 关键处&#xff1a; text-shadow:2px -2px white, -6px 6px gray;给字体添加了两层shadow&#xff0c;右上角白色提亮&#xff0c;左下角灰色阴影。 参数解释&#xff1a;例子中2px -2px white&#xff0c;代表右上角白色 第一个参数2px&#xff1a;正数表示从左…

C++ 完成Client分页显示log

分页显示t_log 1、获取用户的输入 1.1、写一个Input成员函数&#xff0c;处理输入进来的语句 std::string XClient::Input() {//清空缓冲//cin.ignore(4096, \n);string input "";for (;;){char a getchar();if (a < 0 || a \n || a \r)break;cout <<…

基于鸿蒙HarmonyOS 元服务开发一款公司运营应用(ArkTS API 9)

前言 最近基于Harmony OS最新版本开发了一个作品&#xff0c;本文来详细讲解一下&#xff0c;如何我是如何开发这个作品的。以及如何使用OpenHarmony&#xff0c;基于ArkTS&#xff0c;API 9来开发一个属于自己的元服务。 废话不多说&#xff0c;我的作品名称叫做Company Oper…

Spring Boot 中实现文件上传、下载、删除功能

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

【RPC】序列化:对象怎么在网络中传输?

今天来聊下RPC框架中的序列化。在不同的场景下合理地选择序列化方式&#xff0c;对提升RPC框架整体的稳定性和性能是至关重要的。 一、为什么需要序列化&#xff1f; 首先&#xff0c;我们得知道什么是序列化与反序列化。 网络传输的数据必须是二进制数据&#xff0c;但调用…

Jenkins-Maven Git

整合Maven 安装GIT #更新yum sudo yum update #安装git yum install git 安装Maven插件,在插件管理中心&#xff1a; 配置仓库 配置密码认证 我们可以在这个目录下看到Jenkins 帮我们拉取了代码 /env/liyong/data/docker/jenkins_mount/workspace/maven-job 配置maven打包…

江科大STM32 下

目录 ADC数模转换器DMA直接存储器存取USART串口9-2 串口发送接受9-3 串口收发HEX数据包 I2CSPI协议10.1 SPI简介W25Q64简介10.3 SPI软件读写W25Q6410.4 SPI硬件读写W25Q64 BKP、RTC11.0 Unix时间戳11.1 读写备份寄存器BKP11.2 RTC实时时钟 十二、PWR12.1 PWR简介12.2 修改主频1…

Scratch优秀作品飞翔小鸟

程序说明&#xff1a;在无尽的划痕堆中飞驰而过随着你越来越多地飞进迷宫般的街区&#xff0c;平台变得越来越难。 演示视频 scratch飞翔小鸟 其实这就是一个类似像素小鸟的程序&#xff0c;只不过水管角色就地取材&#xff0c;使用scratch里面的积木图片拼成了水管&#xff0…