一个定时任务管理服务
为什么会有这个项目? 基于所任职公司现有的项目,经常会有对
crontab编辑和手动执行的场景,觉得每次都使用vi或vim编辑器进行编辑,然后再去手动执行比较麻烦,无法实现分类管理,日志统计以及结果通知等需求。 因此timer诞生了
在项目根目录执行
mkdir build && cd build
cmake .. && make install默认安装目录是/usr/local
如果需要指定安装目录
mkdir build && cd build
cmake -DCMAKE_INSTALL_PREFIX=/opt/timer .. && make install启动
/usr/local/bin/timer指定配置文件启动
/usr/local/bin/timer -c /usr/local/etc/timer.ini编辑 /etc/systemd/system/timer.service文件
添加以下内容:
[Unit]
Description = timer
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
ExecStart =/usr/local/bin/timer -c /usr/local/etc/timer.ini
User = root
Group = root
Restart = always
[Install]
WantedBy = multi-user.target
应用服务并设置开机自启
systemctl daemon-reload
systemctl enable timer管理服务
启动: systemctl start timer
停止: systemctl stop timer
重启: systemctl restart timer
重载配置: systemctl reload timer
main.pid_filePid文件存储路径main.notify_url事件通知地址(仅支持http, 如果需要https建议使用nginx做一个代理)http.hostHTTP服务监听地址http.portHTTP服务监听端口log.dir日志存储目录log.level日志等级 0-trace, 1-debug, 2-info, 3-warn, 4-err, 5-critical 6-offdb.path数据库文件路径
0: 正常1001: 操作失败1002: 任务不存在1003: 参数解析错误
- 请求方法:
GET - 请求地址:
/ - 请求参数: 无
- 请求数据: 无
- 返回结果
running_number: (int) 正在运行的任务数量task_total: (int) 任务总数
根据uuid判断,如果存在修改现有的信息,如果不存在保存新的任务
- 请求方法:
POST - 请求地址:
/task - 内容类型:
application/json - 请求参数:
uuid: (string) 唯一标识
- 请求数据:
exec_file: (string) 可执行文件地址args: (string) 参数loop: (bool) 是否循环enable(bool) 是否启用cron: (string) cron表达式(支持* * * * * *和* * * * *, 如果不设置秒, 默认每分钟第0秒执行)
- 返回结果: 无
- 请求方法:
GET - 请求地址:
/task - 请求参数: 无
- 请求数据: 无
- 返回结果
[].uuid: (string) 唯一标识[].exec_file: (string) 可执行文件地址[].args: (string) 参数[].loop: (bool) 是否循环[].enable(bool) 是否启用[].cron: (string) cron表达式
- 请求方法:
GET - 请求地址:
/task - 内容类型:
application/json - 请求参数:
uuid: (string) 唯一标识
- 请求数据: 无
- 返回结果
uuid: (string) 唯一标识exec_file: (string) 可执行文件地址args: (string) 参数loop: (bool) 是否循环enable(bool) 是否启用cron: (string) cron表达式
- 请求方法:
DELETE - 请求地址:
/task - 内容类型:
application/json - 请求参数:
uuid: (string) 唯一标识
- 请求数据: 无
- 返回结果: 无
- 请求方法:
POST - 请求地址:
/task/run - 内容类型:
application/json - 请求参数:
uuid: (string) 唯一标识
- 请求数据: 无
- 返回结果: 无
- 请求方法:
POST - 请求地址:
/task/status - 内容类型:
application/json - 请求参数:
uuid: (string) 唯一标识
- 请求数据: 无
enable: (bool) 是否启用
- 返回结果: 无
格式为
{
"event": 1,
"data": {
"uuid": "uuid",
"start_time": "2024-01-01 00:00:00",
"next_run_time": "2024-01-01 00:00:01"
}
}- 事件标识:
1 - 请求方法:
POST - 内容类型:
application/json - 请求参数:
uuid: (string) 唯一标识start_time: (string) 开始运行时间next_run_time: (string) 下一次运行时间
- 事件标识:
2 - 请求方法:
POST - 内容类型:
application/json - 请求参数:
uuid: (string) 唯一标识start_time: (string) 开始运行时间end_time: (string) 结束运行时间runtime: (string) 运行时长(秒)is_normal_exit: (bool) 是否正常退出out: (string) 标准输出内容error: (string) 异常输出内容