青龙自动化订阅完全指南:定时任务脚本如何自动同步与更新
【免费下载链接】qinglong支持 Python3、JavaScript、Shell、Typescript 的定时任务管理平台(Timed task management platform supporting Python3, JavaScript, Shell, Typescript)项目地址: https://gitcode.com/GitHub_Trending/qi/qinglong
青龙是一个支持 Python3、JavaScript、Shell、TypeScript 的定时任务管理平台,而它的「自动化订阅」功能,就是给你的任务脚本接上一个自动更新源:你在面板里填一个远程仓库地址,青龙就会按你定的节奏反复拉取最新脚本,并自动比对、增删对应的定时任务。这样脚本的更新、部署、清理都不再需要手动登录服务器,适合刚接触定时任务管理的新手和需要维护多台实例的小团队。
本文从几个新手最常问的问题出发,逐个讲清楚青龙订阅到底做了什么、要怎么配、失败了怎么排查。
订阅到底同步了什么?
同步的是仓库里「文件后缀」命中的脚本文件,同时会自动增删对应的定时任务,而不是把整个仓库原样搬过来。
你填一个仓库链接后,青龙会先 clone 到本地缓存目录,再按「文件后缀」筛出目标文件。这个后缀如果不填,就沿用 全局配置 里的RepoFileExtensions,默认是js mjs py pyc,也就是把仓库当作脚本来源、只挑这些格式。命中白名单或落在黑名单之外的文件,会被复制到脚本目录执行。
真正让它省事的,是 脚本同步逻辑 里的「差异比对」:青龙会拿这次拉到的脚本清单,去比对本机现有的任务清单。多出来的新脚本,如果开了「自动添加任务」,就会自动解析脚本头部的 cron 表达式并建一条定时任务;被删掉的旧脚本,如果开了「自动删除任务」,就自动移除任务并清理文件。你不需要自己写 crontab。
它支持三种订阅来源:公开仓库、私有仓库(用私钥或 Token 拉取)、单个脚本文件(raw,直接下载一个文件覆盖)。表单里可以直接粘贴ql repo/ql raw命令行,字段会自动填充。
脚本改了多久能生效?
取决于你配的「定时规则」,最短可以到秒级,而不是固定的小时或天。
面板里「定时类型」有两种:crontab和interval(间隔)。
- 选 crontab,就写标准表达式,比如每天凌晨 3 点执行,青龙按点触发拉取。
- 选 interval,就是「每 N 秒/分/时/天」重复一次。填「每 300 秒」,脚本改动后最多 5 分钟就会被拉下来。
也就是说,把间隔调到几百秒,脚本从「提交」到「生效」的延迟,就从小时级压到了分钟级。代价是拉取更频繁,会多占一些网络与磁盘,所以按你的真实更新频率选,别盲目调到 1 秒。
每次拉取还会走一次 调度服务,它会把这次执行挂进内部调度器,跑完把状态和日志路径写回数据库,所以面板上能看到「运行中 / 空闲 / 排队」这些状态。
白名单、黑名单、依赖文件这三个框怎么填?
它们是同一套筛选逻辑,都支持用竖线|分隔多个关键词,也支持正则,用来决定「拉哪些文件」。
三个框分工如下:
- 白名单:只同步命中这些关键词的文件。比如仓库很大,你只想要
price和monitor开头的脚本,就填price|monitor。 - 黑名单:命中就跳过,用来排除测试脚本或临时文件,比如
test|debug。 - 依赖文件:匹配到这些关键词的文件会被当作「依赖清单」处理,比如
requirements.txt|package.json,方便你顺带同步依赖声明。
一个实用的正则示例,只同步备份、监控、报表类脚本:
whitelist:backup|monitor|report extensions:js py sh ts这样青龙只会把命中backup、monitor或report的.js/.py/.sh/.ts文件搬进来,仓库里其余内容一律忽略。筛选规则写在 订阅表单 的这三个 TextArea 里,保存后立即对下一次拉取生效。
自动添加 / 自动删除任务开关,该不该开?
建议默认都开着,这是「脚本删了、任务不删」这类脏数据的根源开关。
- 自动添加任务:新脚本进来后,自动解析其 cron 表达式并建任务。关掉它,脚本文件会同步下来,但不会自动建定时任务,你得手动去任务列表补一条。
- 自动删除任务:脚本在仓库里被移除后,自动删掉对应任务并清理文件。关掉它,旧脚本会一直留在那儿,慢慢积累成没人敢删的僵尸任务。
两个开关的默认值都是开启,逻辑见 更新脚本 里的add_cron/del_cron。如果你只是想让脚本「覆盖更新」、任务规则完全由自己掌控,那就关掉「自动添加」,自己维护定时规则。
配合「执行前」「执行后」两个命令框,还能在每次拉取前后插入自己的操作,比如先跑一段python3 xxx.py生成数据,再拉脚本,或者拉完后cp一份到别的目录。这相当于给同步过程挂了钩子。
同步失败了怎么排查?
先打开该订阅的日志,再按「网络 → 鉴权 → 筛选」的顺序定位,90% 的问题都能在这里找到线索。
每次拉取的完整输出都会写成带时间戳的.log文件,存在日志目录下,面板点进订阅就能看到。看日志时重点盯三处:
- 拉取阶段:是否出现「拉取失败」。公开仓库失败多半是网络或需要代理,面板「代理」框可以填
http://127.0.0.1:1080这类地址;私有仓库则要检查私钥 / Token 是否正确、分支名有没有写错。 - 筛选阶段:白名单 / 文件后缀填得太严,可能一个文件都没命中,日志里看不到任何新增。先放宽后缀、去掉白名单验证一遍,确认能拉到文件,再逐步收紧。
- 任务阶段:文件同步了但任务没建,多半是脚本头部的 cron 表达式格式不对,或者「自动添加任务」被关掉了。
如果你要长期维护这套流程,订阅管理模块 和 整体架构文档 里能对照着看数据是怎么从面板一路落到脚本目录的。
小结
把青龙订阅想成一个「带差异比对的自动部署器」:填一次仓库地址,脚本就会按你定的节奏自动同步,新脚本自动建任务、旧脚本自动清理。上手时抓住四件事就够——
- 用
interval控制同步延迟,用 crontab 控制固定时段; - 白名单 / 黑名单 / 依赖文件决定「拉哪些」;
- 自动添加 / 自动删除任务决定「任务怎么增删」;
- 出问题先看订阅日志,再按网络、鉴权、筛选三步排查。
掌握这几点,定时任务的更新与同步基本就可以交给它,你只专注写脚本本身。
【免费下载链接】qinglong支持 Python3、JavaScript、Shell、Typescript 的定时任务管理平台(Timed task management platform supporting Python3, JavaScript, Shell, Typescript)项目地址: https://gitcode.com/GitHub_Trending/qi/qinglong
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考