SCRHUB -- 脚本任务管理模块
/scrhub.html。script/ 目录,再创建手动任务或 Cron 定时任务。SCRHUB 是 RTKHUB 内嵌的运维脚本任务管理模块,提供脚本任务的创建、调度、执行与日志管理能力。它通过 RTKHUB 主界面的侧边栏直接访问,支持手动执行、Cron 定时调度和执行日志的持久化存储。
核心特性
- 内嵌侧边栏访问 -- 集成在 RTKHUB 主界面中,通过侧边栏"脚本管理"进入
- 递归脚本扫描 -- 自动扫描
script/目录及子目录下的可执行脚本文件 - Cron 定时任务 -- 支持标准 Cron 表达式定时执行脚本
- 执行日志持久化 -- 执行日志写入
database/rtkhub_scr.db,支持日志保留策略
SCRHUB 已嵌入 RTKHUB 主界面。启动 RTKHUB 后访问 http://127.0.0.1:5426/index.html,在侧边栏点击"脚本管理"即可进入。/scrhub.html 保留为直接访问入口。
创建任务
创建脚本任务共 6 个步骤:
- 点击"新建任务"按钮 -- 在任务管理页面点击新建按钮
- 选择脚本 -- 从扫描结果中选择
script/目录下的脚本文件 - 填写基本信息 -- 输入任务名称、描述和日志保留策略
- 选择脚本类型 -- 根据脚本扩展名选择类型(sh/js/py)
- 设置 Cron 表达式 -- 可选,留空表示仅手动执行
- 保存 -- 确认信息后保存任务
脚本文件必须位于 script/ 目录或其子目录下。SCRHUB 在创建任务时会自动扫描该目录并缓存脚本列表。
Cron 表达式
SCRHUB 支持标准 5 字段 Cron 表达式进行定时调度:
| 表达式 | 说明 |
|---|---|
0 * * * * | 每小时执行 |
0 */6 * * * | 每 6 小时执行 |
0 2 * * * | 每天凌晨 2 点执行 |
0 9 * * 1 | 每周一上午 9 点执行 |
*/30 * * * * | 每 30 分钟执行 |
留空 Cron 表达式意味着任务仅支持手动执行,不会被定时触发。如需定时执行,请确保 Cron 表达式格式正确。
查看日志
执行日志的查看方式:
- 在任务列表中点击任意任务
- 右侧面板会显示该任务的执行历史
- 每条日志包含执行时间、状态、退出码和输出内容
日志数据存储在 database/rtkhub_scr.db 中,支持日志保留策略配置,超过保留期的日志会被自动清理。
API 端点
基础地址: http://127.0.0.1:5426/
| 方法 | 端点 | 说明 |
|---|---|---|
| GET | /api/scripts | 获取任务列表 |
| POST | /api/scripts | 创建任务 |
| PUT | /api/scripts/:id | 更新任务 |
| DELETE | /api/scripts/:id | 删除任务 |
| POST | /api/scripts/:id/toggle | 启用/停用任务 |
| POST | /api/scripts/:id/run | 手动执行脚本 |
| GET | /api/scripts/:id/logs | 获取执行日志 |
| GET | /api/scripts/files | 读取脚本文件缓存(每日首次访问或 refresh=1 时扫描 script/ 目录) |
API 使用示例
获取任务列表:
const response = await fetch("http://127.0.0.1:5426/api/scripts");
const scripts = await response.json();
console.log(scripts);
创建新任务:
await fetch("http://127.0.0.1:5426/api/scripts", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
name: "daily_report",
script: "report/daily.py",
description: "每日数据报告",
cron: "0 2 * * *",
log_retention_days: 30
})
});
手动执行任务:
await fetch("http://127.0.0.1:5426/api/scripts/1/run", { method: "POST" });
刷新脚本文件缓存:
const response = await fetch("http://127.0.0.1:5426/api/scripts/files?refresh=1");
数据库
SCRHUB 使用独立的 SQLite 数据库存储任务数据,位于 database/rtkhub_scr.db。
数据表结构
| 表名 | 说明 |
|---|---|
scripts | 存储任务配置信息 |
script_logs | 存储脚本执行日志 |
script_files | 缓存 script/ 目录及子目录下的可执行脚本文件 |
script_file_meta | 存储脚本文件缓存的上次扫描时间 |
SCRHUB 的任务数据独立于 database/rtkhub_users.db 存储。SCRHUB 使用 RTKHUB 主界面的登录会话,不单独维护用户账号库。
安全 -- 脚本路径保护
SCRHUB 对脚本路径实施严格校验:
- 仅允许相对路径 -- 只能执行
script/目录下的脚本 - 拒绝危险路径 -- 自动拒绝包含
..、绝对路径、盘符、冒号、控制字符和常见 shell 元字符的路径 - 多环节校验 -- 新建、更新和执行任务时都会进行路径校验
任何试图通过任务配置执行 script/ 目录外文件的操作都会被拒绝。这是为了防止通过恶意路径配置越权执行系统文件。
JSON 注入防护: SCRHUB 任务接口对 JSON 字段采用键名级匹配,避免请求体字符串值中的同名文本被误识别为字段名。