任务调度c语言数据结构,GitHub - KublaikhanGeek/task_schedule: (C++)基于图数据结构与拓扑序列的任务调度demo...

task_schedule

项目介绍

基于DAG图的调度DEMO,基于图数据结构与拓扑序列理论,实现一个任务调度工具。

功能

当前是一个命令行工具,通过JSON文件配置任务依赖关系,即可由工具完成调度。

现阶段只是一个DEMO, 有时间会把调度结果作为JSON输出, 并且利用工具的进程退出码作为调度成功与否的标识, 方便使用.

配置

{

"maxParallel": 5,

"graph": {

"myGraph": {

"task": [

{

"name": "createFile",

"cmd": "touch /tmp/my_file",

"retry": 2

},

{

"name": "appendFile",

"cmd": "echo hello >> /tmp/my_file",

"deps": ["createFile"]

}

]

}

}

}

运行与日志

./scheduler ./example.json

---------------

任务名:appendFile

SHELL命令:echo hello >> /tmp/my_file

最大重试次数0

是否完成:NO

(当前)依赖这些任务: createFile

(当前)被这些任务依赖:

任务名:createFile

SHELL命令:touch /tmp/my_file

最大重试次数2

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖: appendFile

---------------

---------------

任务名:appendFile

SHELL命令:echo hello >> /tmp/my_file

最大重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖:

任务名:createFile

SHELL命令:touch /tmp/my_file

最大重试次数2

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: appendFile

---------------

---------------

任务名:appendFile

SHELL命令:echo hello >> /tmp/my_file

最大重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖:

任务名:createFile

SHELL命令:touch /tmp/my_file

最大重试次数2

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖:

---------------

原理展示

输入

/*

* 拓扑1

*

* J O B 1

* / \ \

* V V V

* JOB2 JOB3 JOB5

* \ /

* V V

* JOB4

*/

/**

* 拓扑2

*

* J O B 1

* / | \

* V V V

* JOB2 JOB3 JOB4

*

*/

输出

---------------

任务名:graph1-job1

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务: graph1-job2 graph1-job3 graph1-job5

(当前)被这些任务依赖:

任务名:graph1-job2

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务: graph1-job4

(当前)被这些任务依赖: graph1-job1

任务名:graph1-job3

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务: graph1-job4

(当前)被这些任务依赖: graph1-job1

任务名:graph1-job4

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖: graph1-job2 graph1-job3

任务名:graph1-job5

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖: graph1-job1

---------------

---------------

任务名:graph2-job1

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务: graph2-job2 graph2-job3 graph2-job4

(当前)被这些任务依赖:

任务名:graph2-job2

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖: graph2-job1

任务名:graph2-job3

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖: graph2-job1

任务名:graph2-job4

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖: graph2-job1 graph2-job5

任务名:graph2-job5

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务: graph2-job4

(当前)被这些任务依赖:

---------------

---------------

任务名:graph2-job1

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务: graph2-job3 graph2-job4

(当前)被这些任务依赖:

任务名:graph2-job2

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph2-job1

任务名:graph2-job3

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖: graph2-job1

任务名:graph2-job4

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖: graph2-job1 graph2-job5

任务名:graph2-job5

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务: graph2-job4

(当前)被这些任务依赖:

---------------

---------------

任务名:graph1-job1

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务: graph1-job2 graph1-job3

(当前)被这些任务依赖:

任务名:graph1-job2

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务: graph1-job4

(当前)被这些任务依赖: graph1-job1

任务名:graph1-job3

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务: graph1-job4

(当前)被这些任务依赖: graph1-job1

任务名:graph1-job4

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖: graph1-job2 graph1-job3

任务名:graph1-job5

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph1-job1

---------------

---------------

任务名:graph1-job1

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务: graph1-job2 graph1-job3

(当前)被这些任务依赖:

任务名:graph1-job2

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖: graph1-job1

任务名:graph1-job3

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖: graph1-job1

任务名:graph1-job4

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph1-job2 graph1-job3

任务名:graph1-job5

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph1-job1

---------------

---------------

任务名:graph1-job1

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务: graph1-job2

(当前)被这些任务依赖:

任务名:graph1-job2

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖: graph1-job1

任务名:graph1-job3

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph1-job1

任务名:graph1-job4

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph1-job2

任务名:graph1-job5

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph1-job1

---------------

---------------

任务名:graph1-job1

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖:

任务名:graph1-job2

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph1-job1

任务名:graph1-job3

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph1-job1

任务名:graph1-job4

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖:

任务名:graph1-job5

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph1-job1

---------------

---------------

任务名:graph2-job1

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务: graph2-job4

(当前)被这些任务依赖:

任务名:graph2-job2

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph2-job1

任务名:graph2-job3

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph2-job1

任务名:graph2-job4

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖: graph2-job1 graph2-job5

任务名:graph2-job5

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务: graph2-job4

(当前)被这些任务依赖:

---------------

---------------

任务名:graph1-job1

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖:

任务名:graph1-job2

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖:

任务名:graph1-job3

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖:

任务名:graph1-job4

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖:

任务名:graph1-job5

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖:

---------------

---------------

任务名:graph2-job1

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖:

任务名:graph2-job2

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph2-job1

任务名:graph2-job3

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph2-job1

任务名:graph2-job4

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph2-job1 graph2-job5

任务名:graph2-job5

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖:

---------------

---------------

任务名:graph2-job1

命令:sleep 2

重试次数0

是否完成:NO

(当前)依赖这些任务:

(当前)被这些任务依赖:

任务名:graph2-job2

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph2-job1

任务名:graph2-job3

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph2-job1

任务名:graph2-job4

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖: graph2-job1

任务名:graph2-job5

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖:

---------------

---------------

任务名:graph2-job1

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖:

任务名:graph2-job2

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖:

任务名:graph2-job3

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖:

任务名:graph2-job4

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖:

任务名:graph2-job5

命令:sleep 2

重试次数0

是否完成:YES

(当前)依赖这些任务:

(当前)被这些任务依赖:

---------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值