青龙面板 + Server酱:定时任务结果,微信实时可见

效果:青龙面板的定时任务(签到、监控、脚本)执行后,结果自动推送到你的微信。青龙内置 Server酱通知渠道,SCT 与 SC3 的 SendKey 都直接支持,无需写代码。

一句话答案:青龙有两套互相独立的通知配置——面板自己的系统通知在「系统设置 → 通知设置」里选 serverChan;脚本产出的通知走 config.sh 里的 export PUSH_KEY="你的SendKey"。两者互不影响,多数人"测试通知收得到、任务通知收不到"就是只配了前者。

前置条件

先搞清楚:青龙有两套通知

这是青龙接入里最容易踩的坑。两套通知的触发源、配置位置、生效范围都不一样:

面板系统通知脚本通知
谁发的青龙面板本身你跑的脚本(京东签到等)
典型消息任务执行失败、登录异常、容器重启签到结果、账号状态、脚本自定义输出
配置位置系统设置 → 通知设置(图形界面)config.sh 里的 PUSH_KEY 环境变量
改完要重启吗不用不用,下次任务执行即生效

想收到签到脚本的结果,必须配第二套。 只配第一套的话,你只会收到"任务执行失败"这类面板级事件。

方式一:面板系统通知

面板级事件(任务失败、登录异常等)走这里:

  1. 打开青龙面板 → 系统设置通知设置
  2. 通知方式选择 serverChan(Server酱)。
  3. serverChanKey 字段粘贴你的 SendKey,保存。
  4. 点击测试按钮,微信/App 应立刻收到测试消息。

青龙会按 SendKey 前缀自动选择端点:sctp 开头走 Server酱³,其余走 Server酱Turbo(sctapi.ftqq.com)——两种 key 都开箱即用。

不同版本的菜单文案略有出入(有的版本叫「通知设置」,有的在「系统设置」二级页里)。找不到就在设置页搜 serverChan

方式二:脚本通知(签到脚本类)

跑第三方脚本库(京东签到、各类 checkin 脚本)时,脚本产出的通知走 config.sh 的环境变量:

  1. 面板 → 配置文件config.sh,找到通知配置区第 1 项:
## 1. Server酱
## 下方填写 SendKey 值
export PUSH_KEY="你的SENDKEY"
  1. 保存后,凡是调用了青龙自带 notify.py / notify.js(或兼容的 sendNotify)的脚本,执行结果都会推送到微信。

不用重启容器,下一次任务执行就会带上通知。

Docker 部署下 config.sh 在哪

如果你习惯直接改文件而不是用面板的编辑器,config.sh 在容器里的位置随版本变化,进容器确认一下最稳妥:

docker exec -it qinglong ls /ql/data/config/config.sh   # 较新版本
docker exec -it qinglong ls /ql/config/config.sh        # 早期版本

宿主机上则是你 docker run 时映射的那个目录,比如 -v $PWD/ql/data:/ql/data 就对应 ./ql/data/config/config.sh

改完之后确认变量真的进了脚本环境:

docker exec -it qinglong bash -c 'source /ql/data/config/config.sh && echo $PUSH_KEY'

打印为空,说明改错文件了,或者 export 那一行还被 # 注释着。

旧变量名 SCKEY

老教程和老脚本里会看到 SCKEY,那是旧版 Server酱(sc.ftqq.com)时期的变量名。现在统一用 PUSH_KEY。两个都设置不会更保险,只会让你分不清哪个生效——留 PUSH_KEY 一个就好。

先验证 SendKey 本身可用

排查之前先把变量因素排除掉。在任意终端执行:

curl -X POST "https://sctapi.ftqq.com/你的SENDKEY.send" \
  -d "title=青龙配置测试" -d "desp=SendKey 可用"

返回的 JSON 里 code 为 0 且手机收到消息,说明 key 没问题,后面只需要查青龙这一侧。

在容器内部再跑一次同样的命令,可以顺带确认容器的网络能出去:

docker exec -it qinglong curl -s -X POST \
  "https://sctapi.ftqq.com/你的SENDKEY.send" -d "title=容器内测试"

别让签到脚本把额度刷爆

这是青龙用户最常遇到的实际问题:几十个签到脚本各推一条,免费额度(每天 5 条)一个上午就没了。

几个有效的做法:

  • 只给关键脚本开通知。签到成功这种事,失败时知道就够了,成功不必每天播报。
  • 合并推送。很多脚本库支持把一轮任务的结果汇总成一条再发,优先用这种模式。
  • 按失败推送。在脚本里判断退出码,只有非 0 才调用通知:
# 在青龙的任务命令里包一层,只有失败才推
task xxx.js || curl -s -X POST "https://sctapi.ftqq.com/${PUSH_KEY}.send" \
  --data-urlencode "title=任务失败:xxx.js" \
  --data-urlencode "desp=退出码 $?,请查看青龙日志。"
  • 额度确实不够再升级。订阅会员每天最多 1000 次 API 调用(价格详情)。

排查清单

按顺序过一遍,基本都能定位:

  1. 测试通知收到了,任务通知没收到 → 你只配了方式一。去 config.shPUSH_KEY,并确认脚本引用了 notify.py / notify.js
  2. PUSH_KEY 配了还是没消息 → 进容器 echo $PUSH_KEY 确认变量生效;确认 export 那行没被注释;确认改的是青龙实际读取的那个 config.sh
  3. 接口返回 429 → 24 小时内 API 调用超限,停一天自动恢复。通常是某个脚本在循环重试,先去日志里找它。
  4. 提示超出今日免费限制 → 当天 5 条额度用完了。见上面的降噪办法。
  5. 消息内容格式乱、换行没了desp 支持 Markdown;部分脚本库输出纯文本换行,在 Server酱³ 中需要两次换行才分段,详见 FAQ
  6. 标题报"包含特殊字符"title 里不能有换行,长内容放 desp
  7. 以上都没问题但仍然收不到 → 微信端确认没有取消关注服务号,或换一个推送通道试试。

完整排查顺序见 FAQ 的排查清单:看返回值 → 查额度 → 查频率 → 查通道状态。

相关集成

懒人方案:把这段话复制给你的 AI 助手

把下面这段文字原样粘贴给 Claude Code、Cursor 或任何 AI 编程助手,它就会替你完成 Server酱 的接入:

请帮我把 Server酱 微信通知接入到我当前的项目/工具中:
1. API:POST https://sctapi.ftqq.com/{SendKey}.send,参数 title(必填,不能含换行)、desp(正文,支持 Markdown,可选);成功时返回 JSON 的 code 为 0。
2. 如果我的 SendKey 以 sctp 开头,则改用 https://{uid}.push.ft07.com/send/{SendKey}.send,uid 是 SendKey 中 sctp 与 t 之间的数字。
3. SendKey 从环境变量 SERVERCHAN_SENDKEY 读取;如果没有,提醒我到 https://sct.ftqq.com 免费获取(每天 5 条额度)。
4. 安全要求:不要把 SendKey 硬编码进代码、不要打印到日志、不要提交到 git。
5. 频率约定:任务结束发 1 条结果摘要即可,批量任务合并成一条,不要每步都推。
请根据我当前的项目和场景直接写好代码/配置并验证。