任务管控终端的代码实现
任务管控终端,允许从远程接收任务执行并反馈任务执行结果
特性
任务状态周期性上报机制,避免网络环境恶劣导致服务端无法获取任务执行情况
限制单个任务执行时长为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级别配置和用户级别的配置
Comments
Comment plugin failed to load
Loading comment plugin