任务管控终端的代码实现
ssk-wh Lv4

任务管控终端,允许从远程接收任务执行并反馈任务执行结果
算是我对任务管理的总结吧

特性:
任务状态周期性上报机制,避免网络环境恶劣导致服务端无法获取任务执行情况
限制单个任务执行时长为2h
支持日志分类
支持导出历史任务执行状况,最多支持最近的1000个任务
支持通过DBus监听任务执行的实时状态

任务类型-TaskType

类型 取值 说明
Ping 1 检查客户端是否存活,收到后应直接以约定的方式响应服务端
Bash 2 命令的内容一般是bash语句
Settings 3 命令的内容和本地要执行的任务是提前有对应关系的
Strategy 4 策略型任务,一般是一系列任务的集合

任务结构-Task

字段 说明
type 任务类型,决定了如何执行task_command命令
id 唯一的身份ID,用于标识身份
name 任务名称,仅做标记使用
command 任务的具体命令

程序模块

模块 说明
TaskCache 负责任务状态缓存
TaskHandler 执行任务
TaskDispatcher 任务的分发
TaskManager 整体的任务管理
TaskReporter 任务状态上传

思路:

暂时不考虑超大QPS任务请求执行的场景,目前已满足普通商用需求。

利用多线程,支持并发执行多条任务,任务的状态会实时同步到本地缓存,避免异常掉电、崩溃等情况导致的任务丢失问题。周期性的上传任务完成状态到服务端,针对网络环境不稳定情况也能很好的处理。且开了单独的线程(比执行任务的线程优先级要高)用于上传状态。

写这个的目的一是想把心中的任务管理写出来,二是以后万一用到了直接过来拷贝就好了。

TODO:
大批量任务瞬间到达,引发内存峰值的情况还在考虑要不要处理
部分任务很可能需要root权限,考虑子母进程的方式分别实现root级别配置和用户级别的配置

源码地址:https://github.com/ssk-wh/task_manager/tree/master

 Comments