青龙面板 + Server酱:定时任务结果,微信实时可见
效果:青龙面板的定时任务(签到、监控、脚本)执行后,结果自动推送到你的微信。青龙内置 Server酱通知渠道,SCT 与 SC3 的 SendKey 都直接支持,无需写代码。
一句话答案:青龙有两套互相独立的通知配置——面板自己的系统通知在「系统设置 → 通知设置」里选 serverChan;脚本产出的通知走 config.sh 里的 export PUSH_KEY="你的SendKey"。两者互不影响,多数人"测试通知收得到、任务通知收不到"就是只配了前者。
前置条件
- 一个 Server酱 SendKey(30 秒获取教程,SCT 或 SC3 均可)
- 已部署的青龙面板(whyour/qinglong)
先搞清楚:青龙有两套通知
这是青龙接入里最容易踩的坑。两套通知的触发源、配置位置、生效范围都不一样:
| 面板系统通知 | 脚本通知 | |
|---|---|---|
| 谁发的 | 青龙面板本身 | 你跑的脚本(京东签到等) |
| 典型消息 | 任务执行失败、登录异常、容器重启 | 签到结果、账号状态、脚本自定义输出 |
| 配置位置 | 系统设置 → 通知设置(图形界面) | config.sh 里的 PUSH_KEY 环境变量 |
| 改完要重启吗 | 不用 | 不用,下次任务执行即生效 |
想收到签到脚本的结果,必须配第二套。 只配第一套的话,你只会收到"任务执行失败"这类面板级事件。
方式一:面板系统通知
面板级事件(任务失败、登录异常等)走这里:
- 打开青龙面板 → 系统设置 → 通知设置。
- 通知方式选择
serverChan(Server酱)。 - 在 serverChanKey 字段粘贴你的 SendKey,保存。
- 点击测试按钮,微信/App 应立刻收到测试消息。
青龙会按 SendKey 前缀自动选择端点:sctp 开头走 Server酱³,其余走 Server酱Turbo(sctapi.ftqq.com)——两种 key 都开箱即用。
不同版本的菜单文案略有出入(有的版本叫「通知设置」,有的在「系统设置」二级页里)。找不到就在设置页搜
serverChan。
方式二:脚本通知(签到脚本类)
跑第三方脚本库(京东签到、各类 checkin 脚本)时,脚本产出的通知走 config.sh 的环境变量:
- 面板 → 配置文件 →
config.sh,找到通知配置区第 1 项:
## 1. Server酱
## 下方填写 SendKey 值
export PUSH_KEY="你的SENDKEY"
- 保存后,凡是调用了青龙自带
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 调用(价格详情)。
排查清单
按顺序过一遍,基本都能定位:
- 测试通知收到了,任务通知没收到 → 你只配了方式一。去
config.sh配PUSH_KEY,并确认脚本引用了notify.py/notify.js。 PUSH_KEY配了还是没消息 → 进容器echo $PUSH_KEY确认变量生效;确认export那行没被注释;确认改的是青龙实际读取的那个config.sh。- 接口返回 429 → 24 小时内 API 调用超限,停一天自动恢复。通常是某个脚本在循环重试,先去日志里找它。
- 提示超出今日免费限制 → 当天 5 条额度用完了。见上面的降噪办法。
- 消息内容格式乱、换行没了 →
desp支持 Markdown;部分脚本库输出纯文本换行,在 Server酱³ 中需要两次换行才分段,详见 FAQ。 - 标题报"包含特殊字符" →
title里不能有换行,长内容放desp。 - 以上都没问题但仍然收不到 → 微信端确认没有取消关注服务号,或换一个推送通道试试。
完整排查顺序见 FAQ 的排查清单:看返回值 → 查额度 → 查频率 → 查通道状态。