news 2026/9/2 13:02:01

如何用 ntfy 把服务器告警推送到手机:一条命令上手的免费通知方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何用 ntfy 把服务器告警推送到手机:一条命令上手的免费通知方案

如何用 ntfy 把服务器告警推送到手机:一条命令上手的免费通知方案

【免费下载链接】ntfySend push notifications to your phone or desktop using PUT/POST项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy

ntfy 是一个基于 HTTP 的推送通知服务,你只需要一条 curl 命令,就能把服务器上的任何消息推到自己的手机或桌面,不用注册、不用装复杂软件,也不用为此付费。

它和传统邮件通知的区别很直接:邮件要走 SMTP、配置发信账号,而 ntfy 只要会发一个 HTTP 请求就行。下面用两个真实场景带你上手,最后讲清楚它背后的原理和几个容易踩的坑。

场景一:一条 curl 把磁盘告警推到手机

先解决一个最常见的需求:服务器磁盘满了,你想第一时间在手机上知道。

你不需要写后台、不需要申请接口,直接发一条 POST 请求到一个主题(topic)就行:

curl -d "根分区磁盘使用率 91%,请及时清理" ntfy.sh/disk-alert-7f3a

执行后,只要你的手机 App 或网页端订阅了disk-alert-7f3a这个主题,通知就会立刻弹出来。你可以把它写进一个定时脚本,配合df命令判断阈值,超了就发一条消息,等于用几行脚本搭了一个告警推送。

这里注意一下:主题名disk-alert-7f3a后面那段-7f3a不是随便加的。因为 ntfy 不用注册,主题名本身相当于密码——谁知道这个名字,谁就能读到和发送这个主题的消息。所以别用backupalerts这种太直白的名字,加个随机后缀更安全。

场景二:在 CI/CD 流水线里推送构建结果

场景一推的是"发生了什么",而这个场景关心的是"结果好不好看"。区别在于:你要给消息加上优先级和标签,让失败时更扎眼、成功时更低调。

在 Jenkins 或 GitHub Actions 的收尾脚本里,加一段带表头的 curl:

curl -H "Tags: heavy_check_mark" \ -H "Priority: high" \ -d "构建 #482 执行成功,耗时 3 分钟" \ ntfy.sh/ci-build-7f3a

Tags会显示成一个 emoji 图标,Priority控制手机响铃的紧急程度。构建失败时把Priority调成maxTags换成warning,通知就会以最高音量弹出,成功时保持安静。这样你的构建流水线和手机之间就通了,不用再去翻控制台。

反过来,如果你想在服务器端"收"通知并自动执行动作,用订阅命令就能把每条消息触发一条本地命令,比如弹一个桌面通知或跑一个脚本,这块后面机制部分会展开。

机制拆解:topic 就像一条"频道"

把 ntfy 想成广播电台最贴切。topic 就是一个频道名,发消息的人是广播员,收消息的人是听众,而中间的 ntfy 服务器负责把信号转发给所有订阅了这个频道的人。

发一条消息,服务器做三件事:把它落到频道里、推给当前在线的订阅者、并保留一份缓存给后来订阅的人。订阅端则是打开一个长连接(一个一直不挂的 GET 请求),服务器有新消息就顺着这条连接实时吐出来。

用 API 订阅有三种格式,选一种即可:<topic>/json每行一个 JSON 对象,最通用;<topic>/sse适合浏览器里的 JavaScript;<topic>/raw只回消息正文,适合极简脚本。命令行里则直接用ntfy subscribe,它支持"每来一条消息就执行一条命令",消息内容通过$message$priority$tags这些环境变量传给命令。

理解了这个"频道 + 长连接"的模型,你就明白它为什么轻量:没有数据库账号体系、没有复杂协议,核心就是"往一个频道写、从一个频道读"。

按场景调优:标签、优先级、认证什么时候开

不是每个功能都得开。下面这张表帮你按场景决定要不要上某个特性:

场景建议开启说明
日常运维告警默认即可用默认优先级(3),手机正常响铃
生产环境故障Priority: max+Tags: warning最高音量、长震动,务必别错过
低噪音的批量日志Priority: lowmin不响铃、不震动,只在通知栏里躺着
想让消息一眼分辨成败Tags: heavy_check_mark等 emoji图标化,扫一眼就知道状态
主题涉及敏感内容用户名密码 或 访问令牌自建服务器上给主题加读写保护
多设备/多人协作访问令牌(Bearer)比明文密码更适合写进脚本和 CI

优先级一共 5 档:min(1)、low(2)、default(3)、high(4)、max(5),数字越大越急。标签用的是 emoji 的名字,比如warningskulltada,可以逗号分隔叠加。

自建与权限:三步完成私有部署

如果你不想用公共服务,也不想消息经过别人的服务器,自建很轻松——它就是一个单文件二进制,Docker 一条命令就能跑起来:

docker run -p 8080:80 -it binwiederhier/ntfy serve

跑起来后把上面所有 curl 里的ntfy.sh换成你的域名(或localhost:8080)就行。能力边界在这里:默认所有主题都是公开的,要保护敏感主题,必须在服务端配置访问控制,然后发布和订阅时带上凭据(Basic 认证的用户名密码,或 Bearer 访问令牌)。需要持久化缓存的话,记得给/var/cache/ntfy挂一个数据卷。

从源码仓库自己编译也完全可行,完整安装步骤可以看仓库里的 install.md 文档。

常见坑与经验

消息发了但手机没响→ 通常是手机 App 没订阅对应主题,或主题名打错了。先在命令行用ntfy subscribe 你的主题确认消息能收到,再去核对手机 App 里订阅的名字是否一字不差。

标题里的中文显示成问号→ 部分语言的 HTTP 库不支持 UTF-8 表头。把标题按 RFC 2047 做 base64 编码再传,或换成支持 UTF-8 表头的库。

自建的敏感主题被人读到了→ 因为你只建了主题、没开访问控制,等于公开频道。去服务端配置里给该主题加读/写保护,并改用 HTTPS,避免 Basic 认证被窃听。

高优先级消息被系统静音→ ntfy 只能把优先级传过去,最终响不响铃由手机系统管。在 Android 通知设置里给高优先级单独配声音和震动,并别把 ntfy 放进电池优化白名单里。

一条 curl 连上手机,一个长连接喂饱脚本——ntfy 把"通知"这件小事做到了几乎零门槛。

【免费下载链接】ntfySend push notifications to your phone or desktop using PUT/POST项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 12:54:40

如何开发自己的NPU算子?ops-transformer标准算子开发6步全流程详解

如何开发自己的NPU算子&#xff1f;ops-transformer标准算子开发6步全流程详解 【免费下载链接】ops-transformer 本项目是CANN提供的transformer类大模型算子库&#xff0c;实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-transformer ops-transfo…

作者头像 李华
网站建设 2026/9/2 12:50:53

CANN SHMEM Team通信域深度解析:如何用team_split灵活切分多卡分组?

CANN SHMEM Team通信域深度解析&#xff1a;如何用team_split灵活切分多卡分组&#xff1f; 【免费下载链接】shmem CANN SHMEM 是面向昇腾平台的多机多卡内存通信库&#xff0c;基于OpenSHMEM 标准协议&#xff0c;实现跨设备的高效内存访问与数据同步。 项目地址: https://…

作者头像 李华