{"id":21421162,"url":"https://github.com/owenliang/task_schedule","last_synced_at":"2025-07-14T07:32:28.375Z","repository":{"id":57505901,"uuid":"122569669","full_name":"owenliang/task_schedule","owner":"owenliang","description":"(C++)基于图数据结构与拓扑序列的任务调度demo","archived":false,"fork":false,"pushed_at":"2018-03-02T02:26:13.000Z","size":152,"stargazers_count":63,"open_issues_count":0,"forks_count":18,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-06-20T08:00:32.613Z","etag":null,"topics":["cpp","demo","topology"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/owenliang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-02-23T03:38:40.000Z","updated_at":"2024-05-13T07:53:40.000Z","dependencies_parsed_at":"2022-09-13T01:20:51.450Z","dependency_job_id":null,"html_url":"https://github.com/owenliang/task_schedule","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owenliang%2Ftask_schedule","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owenliang%2Ftask_schedule/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owenliang%2Ftask_schedule/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owenliang%2Ftask_schedule/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/owenliang","download_url":"https://codeload.github.com/owenliang/task_schedule/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225962622,"owners_count":17552173,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","demo","topology"],"created_at":"2024-11-22T20:32:02.432Z","updated_at":"2024-11-22T20:32:02.898Z","avatar_url":"https://github.com/owenliang.png","language":"C++","readme":"# task_schedule\n\n## 项目介绍\n\n基于DAG图的调度DEMO，基于图数据结构与拓扑序列理论，实现一个任务调度工具。\n\n## 功能\n\n当前是一个命令行工具，通过JSON文件配置任务依赖关系，即可由工具完成调度。\n\n现阶段只是一个DEMO, 有时间会把调度结果作为JSON输出, 并且利用工具的进程退出码作为调度成功与否的标识, 方便使用.\n\n## 配置\n\n```\n\n{\n  \"maxParallel\": 5,\n  \"graph\": {\n    \"myGraph\": {\n      \"task\": [\n        {\n          \"name\": \"createFile\",\n          \"cmd\": \"touch /tmp/my_file\",\n          \"retry\": 2\n        },\n        {\n          \"name\": \"appendFile\",\n          \"cmd\": \"echo hello \u003e\u003e /tmp/my_file\",\n          \"deps\": [\"createFile\"]\n        }\n      ]\n    }\n  }\n}\n\n```\n\n## 运行与日志\n```\n\n./scheduler ./example.json\n\n---------------\n任务名:appendFile\nSHELL命令:echo hello \u003e\u003e /tmp/my_file\n最大重试次数0\n是否完成:NO\n（当前）依赖这些任务: createFile\n（当前）被这些任务依赖:\n任务名:createFile\nSHELL命令:touch /tmp/my_file\n最大重试次数2\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖: appendFile\n---------------\n---------------\n任务名:appendFile\nSHELL命令:echo hello \u003e\u003e /tmp/my_file\n最大重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n任务名:createFile\nSHELL命令:touch /tmp/my_file\n最大重试次数2\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: appendFile\n---------------\n---------------\n任务名:appendFile\nSHELL命令:echo hello \u003e\u003e /tmp/my_file\n最大重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n任务名:createFile\nSHELL命令:touch /tmp/my_file\n最大重试次数2\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n---------------\n\n```\n\n## \n\n## 原理展示 \n\n### 输入\n\n```\n    /*\n     *  拓扑1\n     *\n     *          J  O  B 1\n     *          /   \\   \\\n     *        V      V    V\n     *     JOB2    JOB3   JOB5\n     *         \\    /\n     *         V   V\n     *         JOB4\n     */\n     \n     /** \n      * 拓扑2 \n      *\n      *      J  O  B  1\n      *     /    |     \\\n      *    V    V      V\n      *  JOB2 JOB3   JOB4  \u003c- JOB5\n      *\n      */\n```\n\n### 输出\n\n```\n\n---------------\n任务名:graph1-job1\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务: graph1-job2  graph1-job3  graph1-job5 \n（当前）被这些任务依赖:\n任务名:graph1-job2\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务: graph1-job4 \n（当前）被这些任务依赖: graph1-job1 \n任务名:graph1-job3\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务: graph1-job4 \n（当前）被这些任务依赖: graph1-job1 \n任务名:graph1-job4\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph1-job2  graph1-job3 \n任务名:graph1-job5\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph1-job1 \n---------------\n---------------\n任务名:graph2-job1\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务: graph2-job2  graph2-job3  graph2-job4 \n（当前）被这些任务依赖:\n任务名:graph2-job2\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph2-job1 \n任务名:graph2-job3\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph2-job1 \n任务名:graph2-job4\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph2-job1  graph2-job5 \n任务名:graph2-job5\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务: graph2-job4 \n（当前）被这些任务依赖:\n---------------\n---------------\n任务名:graph2-job1\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务: graph2-job3  graph2-job4 \n（当前）被这些任务依赖:\n任务名:graph2-job2\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph2-job1 \n任务名:graph2-job3\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph2-job1 \n任务名:graph2-job4\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph2-job1  graph2-job5 \n任务名:graph2-job5\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务: graph2-job4 \n（当前）被这些任务依赖:\n---------------\n---------------\n任务名:graph1-job1\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务: graph1-job2  graph1-job3 \n（当前）被这些任务依赖:\n任务名:graph1-job2\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务: graph1-job4 \n（当前）被这些任务依赖: graph1-job1 \n任务名:graph1-job3\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务: graph1-job4 \n（当前）被这些任务依赖: graph1-job1 \n任务名:graph1-job4\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph1-job2  graph1-job3 \n任务名:graph1-job5\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph1-job1 \n---------------\n---------------\n任务名:graph1-job1\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务: graph1-job2  graph1-job3 \n（当前）被这些任务依赖:\n任务名:graph1-job2\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph1-job1 \n任务名:graph1-job3\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph1-job1 \n任务名:graph1-job4\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph1-job2  graph1-job3 \n任务名:graph1-job5\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph1-job1 \n---------------\n---------------\n任务名:graph1-job1\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务: graph1-job2 \n（当前）被这些任务依赖:\n任务名:graph1-job2\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph1-job1 \n任务名:graph1-job3\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph1-job1 \n任务名:graph1-job4\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph1-job2 \n任务名:graph1-job5\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph1-job1 \n---------------\n---------------\n任务名:graph1-job1\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n任务名:graph1-job2\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph1-job1 \n任务名:graph1-job3\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph1-job1 \n任务名:graph1-job4\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n任务名:graph1-job5\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph1-job1 \n---------------\n---------------\n任务名:graph2-job1\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务: graph2-job4 \n（当前）被这些任务依赖:\n任务名:graph2-job2\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph2-job1 \n任务名:graph2-job3\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph2-job1 \n任务名:graph2-job4\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph2-job1  graph2-job5 \n任务名:graph2-job5\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务: graph2-job4 \n（当前）被这些任务依赖:\n---------------\n---------------\n任务名:graph1-job1\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n任务名:graph1-job2\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n任务名:graph1-job3\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n任务名:graph1-job4\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n任务名:graph1-job5\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n---------------\n---------------\n任务名:graph2-job1\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n任务名:graph2-job2\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph2-job1 \n任务名:graph2-job3\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph2-job1 \n任务名:graph2-job4\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph2-job1  graph2-job5 \n任务名:graph2-job5\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n---------------\n---------------\n任务名:graph2-job1\n命令:sleep 2\n重试次数0\n是否完成:NO\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n任务名:graph2-job2\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph2-job1 \n任务名:graph2-job3\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph2-job1 \n任务名:graph2-job4\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖: graph2-job1 \n任务名:graph2-job5\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n---------------\n---------------\n任务名:graph2-job1\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n任务名:graph2-job2\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n任务名:graph2-job3\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n任务名:graph2-job4\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n任务名:graph2-job5\n命令:sleep 2\n重试次数0\n是否完成:YES\n（当前）依赖这些任务:\n（当前）被这些任务依赖:\n---------------\n\n```","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fowenliang%2Ftask_schedule","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fowenliang%2Ftask_schedule","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fowenliang%2Ftask_schedule/lists"}