定时任务脚本。适用于 nodejs + 青龙
- 😊 成功
- 😂 已做过
- 😪 没有
- 😴 结束
- 🤨 信息
- 😢 警告
- 😱 错误
拉取命令:
ql repo https://github.com/donething/tasks-js.git "dist/task_" "" "dist/utils/"
因为拉取后会改变任务和依赖脚本的相对路径,需要在面板拉取后执行的命令输入框中,增加命令:
rm -rf /ql/data/scripts/donething_tasks-js/utils && mv /ql/data/scripts/donething_tasks-js/dist/utils /ql/data/scripts/donething_tasks-js/- 企业微信推送:
环境变量中添加键QYWX_KEY,值为"id,secret,touser,agentid",以英文逗号分隔 - TG 消息推送:
环境变量中添加键TG_KEY,值的格式:// TG 的 Token、频道 ID interface Token { token: string chatID: string } // TGKeys interface TGKeys { // 标准通知 main: Token, // 新帖的通知 signBot: Token, // 签到的通知 freshPost: Token }
因为青龙总是将任务脚本拉取到根目录,而本地依赖脚本相对路径不变。所以为了避免引用报错,任务脚本需要放在根目录
任务脚本文件名需要前缀task_,以便青龙获取
本地依赖脚本放在/utils目录中
以BACKUPS(./backups)拼接路径,可以将创建的文件存储到宿主机中,以便备份
如const dbPath = BACKUPS + "notify_ckecker.json"
设置脚本的名称、cron:
cron 后的英文冒号":"不能省略,否则会无法识别
// new Env('脚本名称测试');
// cron: 51 5 * * *
console.log("测试!")使用TypeScript编写的脚本,可以通过ts-node直接执行
ts-node .\tasks\discfan.ts为减少总执行时长,需编译为JavaScript后,推送
执行编译 tsc,生成目录dist中
通过 Git 提交
青龙容器使用的是apline系统,可以先在控制面板中,安装Linux依赖chromium。将自动在容器中执行apk add --no-cache chromium
然后,在脚本中只使用puppeteer-core,指定启动路径参数executablePath
参考:How to install chromium in alpine docker to use html.render() from requests_html?
如登录功能,各步骤没有满足都可以抛出错误
某个任务执行完后可以返回Result<T>,以供调用出打印信息
然后在调用时用Promise.allSettled执行,如在一个文件task_daily.ts中调用所有每日任务,用 for遍历结果,推送消息
步骤函数(登录、回帖等),可使用console.log打印详细原因, 也要返回概括值或抛出概括错误
仅当必要步骤(如“登录”)出错时,直接throw抛出错误,其它不必要抛出错误,可返回false
可以参考 ./utils/spider/hostloc/award.ts
在startTask中执行步骤时,可以用try捕获其中的必要步骤,在catch中打印日志和推送错误消息等