title | tags | categories | abbrlink | date | |||
---|---|---|---|---|---|---|---|
任务管控终端的代码实现 |
|
C++ |
78b93c1c |
2023-09-04 14:01:09 -0700 |
任务管控终端,允许从远程接收任务执行并反馈任务执行结果,之前做过类似的项目,总结了一个小的例子
特性: 任务状态周期性上报机制,避免网络环境恶劣导致服务端无法获取任务执行情况 限制单个任务执行时长为2h 支持日志分类 支持导出历史任务执行状况,最多支持最近的1000个任务 支持通过DBus监听任务执行的实时状态
任务类型-TaskType
类型 | 取值 | 说明 |
---|---|---|
Ping | 1 | 检查客户端是否存活,收到后应直接以约定的方式响应服务端 |
Bash | 2 | 命令的内容一般是bash语句 |
Settings | 3 | 命令的内容和本地要执行的任务是提前有对应关系的 |
Strategy | 4 | 策略型任务,一般是一系列任务的集合 |
任务结构-Task
字段 | 说明 |
---|---|
type | 任务类型,决定了如何执行task_command命令 |
id | 唯一的身份ID,用于标识身份 |
name | 任务名称,仅做标记使用 |
command | 任务的具体命令 |
程序模块
模块 | 说明 |
---|---|
Cache | 负责任务状态缓存 |
Handler | 执行任务 |
Dispatcher | 任务的分发 |
Manager | 整体的任务管理 |
Reporter | 任务状态上传 |
任务状态上报时机: 1.单个任务执行结束时触发上报(无论执行成功还是失败均上报) 2.周期性10秒触发一次 3.程序启动后,加载历史任务,如果存在历史任务为已执行结束但状态未上报时触发
思路: 利用多线程,支持并发执行多条任务,任务的状态会实时同步到本地缓存,避免异常掉电、崩溃等情况导致的任务丢失问题。周期性的上传任务完成状态到服务端,针对网络环境不稳定情况也能很好的处理。且开了单独的线程(比执行任务的线程优先级要高)用于上传状态。
写这个的目的一是想把心中的任务管理写出来,二是以后万一用到了直接过来拷贝就好了。
TODO: 大批量任务瞬间到达,考虑将队列数据持久化到磁盘,内存队列有空时再加载进来 部分任务很可能需要root权限,考虑子母进程的方式分别实现root级别配置和用户级别的配置 可以作为系统配置同步工具,支持自动同步远程数据,并在本地执行,支持查询报错日志