跳到主要内容

SCRHUB -- 脚本任务管理模块

适用版本RTKHUB v1.2.x 内置模块,复用 RTKHUB 登录会话和权限体系。
默认入口RTKHUB 主界面侧边栏“脚本管理”,直接入口保留为 /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 个步骤:

  1. 点击"新建任务"按钮 -- 在任务管理页面点击新建按钮
  2. 选择脚本 -- 从扫描结果中选择 script/ 目录下的脚本文件
  3. 填写基本信息 -- 输入任务名称、描述和日志保留策略
  4. 选择脚本类型 -- 根据脚本扩展名选择类型(sh/js/py)
  5. 设置 Cron 表达式 -- 可选,留空表示仅手动执行
  6. 保存 -- 确认信息后保存任务
提示

脚本文件必须位于 script/ 目录或其子目录下。SCRHUB 在创建任务时会自动扫描该目录并缓存脚本列表。

Cron 表达式

SCRHUB 支持标准 5 字段 Cron 表达式进行定时调度:

表达式说明
0 * * * *每小时执行
0 */6 * * *每 6 小时执行
0 2 * * *每天凌晨 2 点执行
0 9 * * 1每周一上午 9 点执行
*/30 * * * *每 30 分钟执行
注意

留空 Cron 表达式意味着任务仅支持手动执行,不会被定时触发。如需定时执行,请确保 Cron 表达式格式正确。

查看日志

执行日志的查看方式:

  1. 在任务列表中点击任意任务
  2. 右侧面板会显示该任务的执行历史
  3. 每条日志包含执行时间、状态、退出码和输出内容

日志数据存储在 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 字段采用键名级匹配,避免请求体字符串值中的同名文本被误识别为字段名。