19 Star 97 Fork 26

Josin / cknit

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
BSD-3-Clause

cknit

cknit 是一款开源高可用定时多任务管理工具,定时精度为秒级别 ( 相比cron增加了秒的取值 ),能够确保高效、稳定的处理多任务。 定时精度随任务量的变化如下所示:

任务数量 定时精度偏差
1000 0.01s
100000 1s

支持平台

目前支持 Linuxmac 两大平台,mac 平台使用 select 系统调用,Linux平台使用 Posix (timer),因此 Linux 平台性能比 mac 平台稍高,任务调度精度更佳

时间间隔格式

标准格式:

* * * * * *

含义 取值范围
1 0-60
2 0-59
3 0-23
4 1-31
5 0-11 0:表示一月
6 0-6 0:表示周日

符号的含义:

特殊符号 含义 示例
* 每个取值都成立 *
/ 每隔多少区间 */2
, 多个取值 OR条件 2,3,4

示例:

  • 每周三到周五上午10点30分每隔5秒
*/5 30 10 * * 3-5
  • 每天早上8点10分每秒
* 10 8 * * *
  • 每周二,周五,周日的下午1点每两秒
*/2 0 13 * * 2,5,0
  • 八月八日八点八分每30秒
*/30 8 8 8 8 0-6

cknit 兼容 cron 表达式语言,cknit自己实现的解析引擎, 不需要依赖 cron 就可以完美运行,如果各位在使用的过程中发现任何问题,欢迎 issue

设计架构

cknit

安装

cknit 采用 cmake 编译系统,因此需要目标机器安装 cmake 3.13 及以上版本

1、下载源码

git clone https://gitee.com/josinli/cknit.git

2、编译

mkdir build
cd build
cmake ..
make && make install
cknit -k start

3、配置

默认情况下,执行安装后,cknit的配置文件会存在于 /etc/cknit目录下,其中 :

default_api.exjson 访问API首页的响应内容
cknit.exjson cknit的系统配置
task.exjson cknit的默认任务配置,启动的时候会自动加载

4、配置文件格式

cknit采用Exjson格式的配置文件,兼容JSON文件,在JSON的文件基础上增加了部分特性:

特性一:支持注释,Exjson 的注释是 // 或者 # 开头

特性二:配置文件支持 特殊的符号: onoff

序列化和反序列化的结果情况下如下表:

特殊符号 含义 解析结果 是否支持反序列化
true 布尔值:真 整型值 1 支持
false 布尔值:假 整型值 0 支持
on 开启 整型值 1 不支持
off 关闭 整型值 0 不支持
null 整型值 0 支持

4、日志

默认情况下日志记录在: /var/log/cknit 目录下

5、默认添加的任务状态都是未启动的,需要通过接口更改任务状态,方才可以生效,或者添加任务的时候,手工指定任务状态: status 等于 on|true, 如:

POST http://localhost:9898/monitors
{
	"command":"php ~/Desktop/index.php", 
	"period": "*/2 * * * * *", 
	"status":ON
}

APIs管理

安装完成后,访问:

http://127.0.0.1:9898

响应如下:

{
    "message": "Welcome use cknit",
    "version": "1.0",
    "code" : "OK",
    "port" : 9898,
    "APIs" : [
        {
            "name": "Get all exists tasks",
            "method": "GET",
            "protocol": "HTTP/1.1",
            "url": "http://127.0.0.1:9898/monitors"
        },
        {
            "name": "Add task",
            "method": "POST",
            "protocol": "HTTP/1.1",
            "url": "http://127.0.0.1:9898/monitors"
        },
        {
            "name": "Modify task",
            "method": "PUT",
            "protocol": "HTTP/1.1",
            "url": "http://127.0.0.1:9898/monitors"
        },
        {
            "name": "Delete task",
            "method": "DELETE",
            "protocol": "HTTP/1.1",
            "url": "http://127.0.0.1:9898/monitors"
        }
    ]
}

API: 获取当前所有的任务

GET http://127.0.0.1:9898/monitors
名称 取值
请求报文
报文格式 JSON

响应回答如下:

[
    {
        "command": "php ~/Desktop/index.php",
        "period": "* 1,2,3,10-20 * * * *",
        "id": 1,
        "status": -1
    },
    {
        "command": "php ~/Desktop/index.phpd",
        "period": "* * * * * * */2",
        "id": 2,
        "status": -1
    }
]

API: 在线添加任务

POST http://127.0.0.1:9898/monitors
{
	"command": "php ~/Desktop/index.php",
	"period": "* * * * * */2"
}
名称 取值
请求报文 { "command":"定时任务名称", "period":"定时间隔"}
参数
command 定时任务名称
period 定时间隔
status 可选值,默认添加的任务不开启,如果此字段设置为 1ON 或者 true,那么表示添加完成就开启任务
报文格式 JSON

响应回答如下:

{
    "message": "Success",
    "code": "true",
    "operation": "Add task"
}

API: 在线修改已存任务(id是系统自动分配的)

PUT http://127.0.0.1:9898/monitors
{
	"id": 998,
	"data": {
		"status":0,
		"period": "* * * 11 * */2",
	}
}
名称 取值
请求报文 { "id":1, "data":{"status":0, "period":"* * * * * *", "comment":"python novel.py 2&>1/dev/null"}}}
参数
id 任务id,添加完任务后,系统自动分配ID ( ID无法修改,统一由系统维护 )
data 需要修改的数据内容体
status 设置任务的状态:0(未开启) 1(开启) 对应的符号变量:true|on -> 1 false|off -> 0
period 设置任务的定时间隔
comment 设置任务的执行命令
报文格式 JSON

响应回答如下:

{
    "message": "Success",
    "code": "true",
    "operation": "Modify task"
}

API: 在线删除已存任务(id是系统自动分配的)

DELETE http://127.0.0.1:9898/monitors
{
	"id": 998
}
名称 取值
请求报文 {"id":1}
参数
id 任务id,添加任务后,系统自动分配
报文格式 JSON

响应应答报文如下:

{
    "message": "Success.",
    "code": "true"
}
BSD 3-Clause License Copyright (c) 2019, Josin All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

高精度、高可用的定时任务管理器 展开 收起
BSD-3-Clause
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C
1
https://gitee.com/josinli/cknit.git
git@gitee.com:josinli/cknit.git
josinli
cknit
cknit
master

搜索帮助

14c37bed 8189591 565d56ea 8189591