通用的定时任务工具 schedule-server
背景: 我曾经在一个自动化测试平台中集成定时任务,基于 APScheduler 库花了好长时间解决重复执行的问题。定时任务集成在服务中也让服务变得复杂。最后,我们选择了公司其他团队go语言开发的一个定时任务服务。于是萌生了想法,和不用 Python实现一个通用的定时任务服务。于是,schedule-server应运而生。
schedule-server 特点
- 运行与部署简单。
- 基于HTTP触发请求。
- 支持三种类型的定时任务:
crontab、interval、date - 支持定时任务的
查询、删除、添加、暂停/恢复等操作。
schedule-server 架构图

schedule_server: 核心功能是定时触发HTTP请求。fontend: 通过前端UI管理定时任务。you server: 在你的服务中通过调接口的方式管理定时任务。SQLite: 用于保存定时任务服务。Redis: 通过Redis锁解决重复触发的问题。
安装与运行
安装依赖
> cd schedule_server
> pip install -r requirements.txt
开发运行
> uvicorn main:app --reload
INFO: Will watch for changes in these directories: ['/.../schedule-server/schedule_server']
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [21905] using StatReload
INFO: Started server process [21907]
INFO: Waiting for application startup.
查看API
访问URL: http://127.0.0.1:8000/docs

前端服务
使用schedule_server服务可以不需要前端,但是,你想可视化的方法管理定时任务,我还为此专门开发了个前端服务。
安装依赖
> npm install
运行服务
> npm run dev
> wiremock-ui@0.0.1 dev
> vite
VITE v4.3.9 ready in 3426 ms
➜ Local: http://localhost:5173/
➜ Network: use --host to expose
➜ press h to show help
访问前端页面
访问url: http://localhost:5173/

定时类型
schedule-server支持三种定时类型:crontab、interval、date,可以满足不同的需求。
date类型
data类型比较简单,适合固定的日期时间触发定时任务。
调用接口
- URL:http://127.0.0.1:8000/scheduler/date/add_job
- Method:
POST - Type:
JSON
{
"job_id": "date_job_111",
"url": "https://httpbin.org/get?id=111",
"year": 2022,
"month": 11,
"day": 18,
"hour": 7,
"minute": 0,
"second": 0
}
- 前端配置

interval类型
interval适合间隔时间重复执行的定时任务。
调用接口
- URL:http://127.0.0.1:8000/scheduler/interval/add_job
- Method:
POST - Type:
JSON
{
"job_id": "interval_job_222",
"url": "https://httpbin.org/get?id=222",
"hours": 0,
"minutes": 0,
"seconds": 10
}
- 前端配置

cron类型
conn使一种复杂的定时任务,能够支持所有的定时任务需求。
调用接口
- URL:http://127.0.0.1:8000/scheduler/cron/add_job
- Method:
POST - Type:
JSON
{
"job_id": "cron_job_333",
"url": "https://httpbin.org/get?id=333",
"second": "0",
"minute": "*/3",
"hour": "*",
"day": "*",
"month": "*",
"day_of_week": "*"
}
可以参考这个网站学习:https://tooltt.com/crontab-parse/
- 前端配置

通用的定时任务工具 schedule-server的更多相关文章
- MySQL通用批量写入工具(Python)
背景 平台目前的分析任务主要以Hive为主,分析后的结果存储在HDFS,用户通过REST API或者Rsync的方式获取分析结果,这样的方式带来以下几个问题: (1)任务执行结束时间未知,用户 ...
- 安装 SQL Server 2008 和管理工具 SQL Server 2008 management studio 及相关问题解决
Sql Server 2008 问题小总结 http://www.lihengyu.com/blog/4877.html 安装 SQL Server 2008 和管理工具 SQL Server 200 ...
- 【測试工具】一个将Unix时间转换为通用时间的工具
一个将Unix时间转换为通用时间的工具 演示效果: 点击转换之后变为: 源码: function calctime2(){ var time = window.document.getElementB ...
- Quartz:定时任务工具类
Quartz:定时任务工具类 Quartz工具类 Quartz工具类 import org.quartz.*; import org.quartz.impl.StdSchedulerFactory; ...
- Java中使用最频繁及最通用的Java工具类
在Java中,工具类定义了一组公共方法,Java中使用最频繁及最通用的Java工具类. 一. org.apache.commons.io.IOUtils closeQuietly:关闭一个IO流.so ...
- 定时任务工具Linux crontab命令详解
crontab:定时任务的守护进程,精确到分,设计秒的我们一般写脚本 -->相当于闹钟 日志文件: ll /var/log/cron* 编辑文件: vim /et ...
- Java定时任务工具详解之Timer篇
Java定时任务调度工具详解 什么是定时任务调度? ◆ 基于给定的时间点,给定的时间间隔或者给定的执行次数自动执行的任务. 在Java中的定时调度工具? ◆ Timer ◆Quartz T ...
- 数据库性能监测工具——SQL Server Profiler
使用SQL Server Profiler 进行sql监控需要一些设置: 其他的就是进行分析了~ 清除SQL SERVER缓存 常用的方法: DBCC DROPCLEANBUFFERS 从缓冲池中删除 ...
- Linux定时任务工具crontab详解及系统时间同步
Linux配置自动时间同步 linux下时间同步的两种方法分享 tail -f /var/log/cron linux下定时执行任务的方法 在LINUX中你应该先输入crontab -e,然后就会有 ...
- linux 下的 crontab 定时任务工具
以下内容转自:https://www.cnblogs.com/longjshz/p/5779215.html 在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep c ...
随机推荐
- SQL limit字句
limit用法介绍 limit子句可以返回检索查询行的某一连续的部分 用法介绍: SELECT column_list FROM table1 ORDER BY column_list LIMIT r ...
- 如何更改Wordpress语言为中文
在使用WordPress的时候,一般安装默认语言是英文,可以在后台设置里面直接修改站点语言为简体中文,当后台没有语言选项框的这一栏,如下图所示,该怎么办呢? 这个时候我们可以找到文件wp-config ...
- C#/.NET/.NET Core开发实战教程集
DotNetGuide介绍 DotNetGuide是一个专注于C#/.NET/.NET Core学习.工作.面试指南的GitHub知识库,该知识库在GitHub中Star数已突破6.5k+当然这离不开 ...
- 墨天轮访谈 | OceanBase 白超:海量数据管理,为什么选择OceanBase?
分享嘉宾:白超(大窑) OceanBase解决方案架构师.前蚂蚁集团数据库团队DBA专家 整理:墨天轮社区 导 读 大家好,我是白超(花名:大窑),在过去的几年中,作为蚂蚁集团数据库SRE团队成员,经 ...
- python+ffmpeg视频转码转格式
本文转发来自:https://blog.csdn.net/KH_FC/article/details/115771126 废话 python目前自己也是在学习当中,对python也不是特别精通,写视频 ...
- 12C RAC 故障分析 - ORA-17503: ksfdopn:2 Failed to open file +DATA/EIC1/PASSWORD/pwdeic1.256.957086685
一.故障描述 Oracle 12C PDBS(PDB NAME = WRYPC) 在note1节点上是MOUNTED状态,在note2节点上是READ WRITE状态.note1节点上启动该PDB长时 ...
- SpringBoot2.0 整合 JWT 框架后台生成token
一.传统Session认证 1.1.认证过程 1.用户向服务器发送用户名和密码.2.服务器验证后在当前对话(session)保存相关数据.3.服务器向返回sessionId,写入客户端 Cookie. ...
- 彻底理解spring框架当中的依赖注入(DI)与控制反转(IOC)理念
什么是依赖注入 人生当中第一次听说到这个概念是在spring框架的学习当中,当然依赖注入并不局限于spring,其实依赖注入早已不是一个新鲜词,而是一个犹如古董般的设计理念,但是我还年轻呐那么就从这里 ...
- Oracle HR样例数据库建立
在视频的学习过程中,老师用到了HR样例数据库,但是我发现我的样例数据库中没有HR样例数据库,可能是在安装的时候漏掉了哪个环节,所以只能补救一下 如何判断自己是否有HR样例数据库呢?操作代码如下所示 第 ...
- 如何使用程序生成一个复杂的2D迷宫游戏地图
相关: I Solved The World's Hardest Maze (with Code) 本文不做过多的内容介绍,本文主要是分享上面的这个视频内容,该内容介绍了一些自动生成复杂2D迷宫的算法 ...