首页 › weekly › 一行curl,消息直达手机锁屏

本期主题:自建通知栈——NAS挂了、网页降价了、定时任务死了,消息怎么第一时间跳上手机锁屏

前面几轮挖过语音、显微镜、生意流水线,这一轮换一个所有自建玩家都绕不开、却很少有人系统做的方向:通知。绝大多数人家里有 NAS、服务器、一堆定时脚本,但它们出事的时候,你往往是第二天才想起来去看日志。这期 8 个仓库拼出一条完整链路:从一行 curl 直推 iPhone 锁屏的 ntfy,到给老设备邮件报警当翻译官的 Mailrise,再到两个“什么才值得被通知”的场景仓库——盯网页变动的 changedetection.io 和给定时任务守灵的 Healthchecks。全程零 AI 套壳,全是当晚就能跑起来的小工具。文中 Star 为写作时点的大致量级,实时数据以仓库页面为准。


1. ntfy —— 把 HTTP POST 变成一条手机推送

仓库:binwiederhier/ntfy | Star:2 万+ | 更新:长期活跃,作者 Philipp Heckel 一个人维护多年

它的整个 API 就是一行命令:

curl -d "备份完成,耗时 37 分钟" ntfy.sh/my-secret-topic

手机装上 ntfy App 订阅这个 topic,消息立刻出现在锁屏上。不用注册、不用申请 key、不用接 SDK——痛点就这么被一行命令干掉了。自建版是单个 Go 二进制加一个容器,支持用户鉴权、消息附件、定时发送和点击跳转。实现上它走的是发布/订阅模型,topic 即频道,谁订阅谁收;App 端用长连接保活,还兼容 UnifiedPush 标准,成了不少去谷歌化安卓用户的推送底座。Home Assistant 现在内置 ntfy 集成,可见其江湖地位。

2. Bark —— iPhone 用户的自建推送直通车

仓库:Finb/Bark | Star:6 千+ | 更新:稳定维护,配套 iOS App 在 App Store 常年可用

ntfy 在 iOS 上受系统推送限制没法做到秒达,Bark 用另一条路解决了这个问题:iOS App 常驻苹果 APNs 通道,你自建一个 Go 写的 bark-server,App 把自己的 device key 注册上去,之后同样是一行 curl 直达锁屏:

curl https://api.day.app/你的key/服务器磁盘将满

自建服务端 + 借用官方 App 的 APNs 证书,这个组合让它成了中文自建圈的事实标配:群晖告警、Home Assistant 联动、爬虫跑完通知,全是它的经典用法。还支持消息分组、自定义铃声、端到端加密选项。官网文档在 bark.day.app。

3. Gotify —— 老牌自建推送中心,家庭服务器的消息总线

仓库:gotify/server | Star:近万 | 更新:维护节奏慢但持续,社区稳定

比 ntfy 更早的玩家。Go + Vue 构建的单二进制服务,通过 WebSocket 长连接推送到自家的安卓 App。设计上每个应用发一个 token——备份脚本一个、下载器一个、监控一个——消息按应用分流入界面,相当于给家里所有会说话的机器装了一个总机。支持插件体系和 REST API,Python、Go 的客户端库齐全。它比 ntfy 重一点:要先起服务、建应用、拿 token,换来的是完整的 Web 管理界面、历史消息留存和多端管理。如果你的场景是“家里七八个服务都要汇报工作”,Gotify 的消息中心形态比 ntfy 的频道流更好管理。

4. Apprise —— 一个命令打通一百多种通知渠道

仓库:caronc/apprise | Star:1.2 万+ | 更新:非常活跃,作者 Chris Caron 长期高频发版

前面三个工具各管各的渠道,Apprise 管所有渠道。这个 Python 库把上百种通知服务抽象成了 URL:Telegram 是 tgram://,邮件是 mailto://,Slack、Discord、企业微信各有各的 scheme。一条命令同时群发:

apprise -t "发布完成" -b "v2.0 已上线" tgram://... mailto://...

它的实现亮点在于抽象层设计:新增一个服务只需实现统一的 schema 接口,所以渠道增长极快,Uptime Kuma 这类明星项目的通知后端就是直接内嵌的 Apprise。对你自己写工具的意义是:通知能力写一次,用户爱用什么渠道就配什么 URL。

5. shoutrrr —— Go 世界的 URL 通知库,两千星以内的小透明

仓库:containrrr/shoutrrr | Star:千余,两千以内 | 更新:低频维护,胜在接口稳定

Apprise 是 Python 世界的答案,shoutrrr 是 Go 世界的同思路实现:通知配置就是一个 URL,gotify://192.168.1.10/token、smtp://user:pass@host,CLI 一行发送,也可以作为库嵌进你自己的 Go 程序。它出名的途径很特别——容器更新工具 Watchtower 的通知后端就是它,所以无数人“用过但不知道它的名字”。仓库小、代码干净,非常适合当作阅读 Go 优秀小项目的样本,也适合你在写运维小工具时直接抄来用。

6. Mailrise —— 给只会“发邮件报警”的老设备当翻译官

仓库:Ylianst/Mailrise | Star:千余,两千以内 | 更新:轻量维护,作者 Ylian Saint-Hilaire 也是 MeshCentral 的作者

这是本期最刁钻也最解气的一个。你家路由器、NAS、打印机、UPS 的通知设置栏里,往往只有一个“SMTP 邮件报警”,永远做不到手机秒收。Mailrise 是一个迷你 SMTP 服务器:老设备把“邮件”发给它,它用 Apprise 把内容转成上百种现代推送渠道——ntfy、Telegram、Bark 通通可以。配置文件里登记好目标,老设备的通知栏里填上 Mailrise 的地址,十分钟内一套十年前的硬件就接入了 2026 年的通知体系。部署是一个小容器,资源占用几乎为零。它解决的不是新问题,而是存量世界的兼容问题——这类工具往往最长寿。

7. changedetection.io —— 盯网页的神器,开源商业化的活样本

仓库:dgtlmoon/changedetection.io | Star:2 万+ | 更新:极度活跃,基本日更

通知栈里“消息从哪来”的最佳答案。它盯着你指定的任意网页:商品降价了、订单出签了、心仪的二手房挂牌了、竞品改了定价页——变了就通过内置的 Apprise 通知你(对,就是第 4 个仓库,这就是开源生态的咬合方式)。技术上有两档:默认 HTTP 抓取加文本 diff,遇到重 JS 的页面可以选 Playwright 无头浏览器渲染;支持 XPath 和 JSON 路径精准定位页面元素,所以既能盯页面文字也能盯 API 字段。它是“开源核心 + 官方付费托管”模式教科书级的案例:免费版自建无限用,不想折腾的人为托管版付月费,作者一个人把项目做成了可持续生意。

8. Healthchecks —— 给定时任务请一位守灵人

仓库:healthchecks/healthchecks | Star:8 千+ | 更新:持续活跃,项目从 2015 年做到现在

监控领域有个反直觉的事实:“没有消息”才是坏消息。你的备份脚本崩了,它不会发错误通知——它只是明天不会再跑了。Healthchecks 的思路是把报警反转过来:每个定时任务领一个 ping 地址,任务正常跑完就 curl 一下它,超过预期时间没收到 ping,它就替沉默的任务喊人:

curl -fsS --retry 3 https://hc-ping.com/你的uuid

Django 单体应用,代码规模友好,支持 cron 表达式定义预期节奏、任务间依赖,通知渠道覆盖邮件、Telegram、Slack 等几十种。更有意思的是它的商业面:同一作者用这套代码运营的 SaaS(healthchecks.io)自 2015 年跑到现在,是个人开发者靠开源项目养活自己的少数活样本——代码开源引流,托管版收订阅费,两边互不耽误。


横向对比

仓库 角色 Star 量级 上手 一句话场景
ntfy 发送端 2 万+ ⭐ 一行 curl 直推锁屏
Bark 发送端(iOS) 6 千+ ⭐ iPhone 秒达,中文圈标配
Gotify 消息中心 近万 ⭐⭐ 家庭服务器消息总线
Apprise 渠道适配层 1.2 万+ ⭐ 一个库打通上百渠道
shoutrrr 渠道适配层 两千以内 ⭐ Go 版 URL 通知
Mailrise 协议翻译 两千以内 ⭐⭐ 老设备邮件报警转推送
changedetection.io 消息来源 2 万+ ⭐⭐ 盯网页变动盯降价
Healthchecks 消息来源 8 千+ ⭐⭐ 定时任务的死亡开关

生态一张图

mindmap
  root((自建通知栈))
    发送端
      ntfy 一行curl
      Bark iOS直达
      Gotify 自建中心
    转接头
      Apprise 上百渠道
      shoutrrr Go库
      Mailrise 邮件桥
    什么时候响
      changedetection 盯网页
      Healthchecks 守任务

链路的搭法很自然:changedetection.io 和你的定时脚本负责“发现事情”,Apprise/shoutrrr 负责选渠道,ntfy/Gotify/Bark 负责最后那一跳到锁屏;Mailrise 在角落里收留所有只会发邮件的老古董。

本期之最

参考来源

  1. binwiederhier/ntfy — ntfy 仓库及官方托管站 ntfy.sh,一行 curl 推送的文档出处
  2. dgtlmoon/changedetection.io — 网页变动监控,官方付费托管版见 changedetection.io
  3. Finb/Bark — Bark 服务端仓库,iOS 端文档见 bark.day.app
  4. healthchecks/healthchecks — 开源版仓库,商业托管版 healthchecks.io 自 2015 年运营
  5. caronc/apprise、gotify/server、Ylianst/Mailrise、containrrr/shoutrrr — 各仓库主页及其 README

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入