尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

ntfy 如何用 cron 任务在备份脚本结束后推送成功或失败通知

ntfy 如何用 cron 任务在备份脚本结束后推送成功或失败通知 ntfy 如何用 cron 任务在备份脚本结束后推送成功或失败通知【免费下载链接】ntfySend push notifications to your phone or desktop using PUT/POST项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy假设你有一台服务器每天用 cron 跑备份脚本但备份挂了要等第二天才发觉。ntfy 的做法是把「发消息」变成一次 HTTP PUT/POST把消息发到某个 topic凡是订阅了这个 topic 的渠道手机 app、网页、CLI都会收到推送。官方示例文档 docs/examples.md 明确说 ntfy「perfect for any kind of cronjobs or just when long processes are done (backups, pipelines, rsync copy commands)」并给出了备份成功后发成功通知、失败后发失败通知的 curl 写法。本文主路径只依赖curl和公开的 ntfy.sh备份机器上不用装任何东西docs/install.md 说明只用 ntfy.sh 发消息时可以直接用 curl无需安装。自建 ntfy 服务器同样适用把示例里的ntfy.sh换成你的域名即可。准备选一个不可猜的 topic 并做测试发送topic 在发布或订阅时即时创建无需注册。正因如此topic 名本质上就是密码知道 topic 名的人可以读写它docs/publish.md。规则topic 名只能包含字母、数字、下划线和短横线[-_A-Za-z0-9]最长 64 个字符所以要选一个不容易被猜中的名字。选好 topic 后先手动发一条测试消息确认链路通curl -d ntfy backup channel test ntfy.sh/mytopicntfy.sh/mytopic中的mytopic换成你自己选的 topic。下面各节示例沿用文档里的backups这个名字替换方式相同。主路径在脚本里用/||发布成功与失败通知docs/examples.md 给出的备份通知模式是把curl直接接在备份命令后面备份命令成功退出码 0就发成功通知链条中任何一步失败就落到||后面发失败通知rsync -a rootlaptop /backups/laptop \ zfs snapshot ... \ curl -H prio:low -d Laptop backup succeeded ntfy.sh/backups \ || curl -H tags:warning -H prio:high -d Laptop backup failed ntfy.sh/backups这段是文档原样示例替换两处后再用zfs snapshot ...里的省略号是文档略去的步骤换成你实际的备份命令ntfy.sh/backups换成你的 topic。把它放进一个 shell 脚本例如backup-with-ntfy.sh即可。两条通知的 header 含义按 docs/publish.md 的解释prio:lowprio是X-Priority头的别名别名还有Priority、p。按文档的优先级表lowID 2在 Android 上没有震动和声音下拉通知栏才可见highID 4则是长震动、默认铃声并弹出通知。也就是说成功通知低调、失败通知醒目这正是文档示例的选择。tags:warningtag 匹配 emoji 短代码时会转成 emoji 显示在通知里warning对应 ⚠️见 docs/emojis.md。可选加-H Title: ...X-Title头的别名给通知起标题例如区分是哪台机器的备份。带标题、标签、优先级的通知效果见 publish.md 中的这张截图文档示例实际内容以你发的消息为准把脚本加入 cron 定时运行编辑当前用户的 crontabcrontab -e加入一行定时任务。时间格式沿用文档示例中的每日 0 点脚本路径换成上一节写好的脚本0 0 * * * /path/to/backup-with-ntfy.sh/path/to/backup-with-ntfy.sh需替换为你脚本的实际路径。文档 docs/examples.md 中给出的真实 crontab 行是这个形态其中ntfy-run一节的说明见下节0 0 * * * ntfy-run -n https://ntfy.sh/backups --success-priority low --failure-tags warning ~/backup-computer验证通知是否真的发出去了不用等 cron 触发先手动跑一遍脚本同时用下面任一方式确认消息到达方式一用 ntfy CLI 订阅 topic。ntfy subscribe会逐条打印每条消息的 JSONdocs/subscribe/cli.md$ ntfy sub mytopic {id:nZ8PjH5oox,time:1639971913,event:message,topic:mytopic,message:hi there}以上是文档示例输出。测试失败分支时可参考 examples.md 里用false必然以退出码 1 结束制造失败的做法临时把备份命令换成一条必然失败的命令手动运行脚本确认收到带 ⚠️ 的失败通知恢复后再正常运行一次确认收到成功通知。**方式二用网页应用。**打开 ntfy.sh/app输入 topic 名并点击 Subscribe发布到该 topic 的消息会出现在网页里并弹出浏览器通知docs/subscribe/web.md。装了 Android app 的手机同理发布后会收到系统推送。两条验证都通过后剩下的就交给 cron 了。替代路径一用 ntfy-run 包裹脚本把输出带进通知docs/integrations.md 列出的第三方工具 ntfy-runRust 编写可以运行一条命令、捕获其输出并发送到 ntfy。examples.md 说明用它的好处cron 任务的输出会直接写进通知「so that you know exactly why it failed」。上面的 crontab 行就是这种用法成功时按low优先级通知到https://ntfy.sh/backups失败时带warning标签被包裹的脚本是~/backup-computer。ntfy-run 独立于 ntfy 本体需要单独安装用自建服务器时把 URL 换成自己的地址。替代路径二用 ntfy CLI 的--wait-cmd如果你已安装 ntfy CLI与服务端是同一个二进制安装方式见 docs/install.md可以用ntfy publish --wait-cmd别名--cmd、--done包裹长命令命令结束时自动发布通知docs/subscribe/cli.md$ ntfy pub --wait-cmd mytopic rsync -av ./ rootexample.com:/backups/ | jq . { id: Re0rWXZQM8WB, time: 1655825624, event: message, topic: mytopic, message: Command succeeded after 56.553s: rsync -av ./ rootexample.com:/backups/ }以上是文档示例输出耗时数值因环境而异。文档展示的这条完成通知针对成功场景若需要像主路径那样对成功和失败分别定制消息文本、优先级和标签用/||的 curl 写法更直接。限制与注意topic 即密码用 ntfy.sh 时任何知道 topic 名的人都能向它发布、读取它。所以 topic 名要难猜通知正文也不要放敏感数据。自建服务器并启用了访问控制时受保护 topic 需要凭据examples.md 给出的做法是把 token 存成权限 600 的文件再读入echo your_bearer_token_here ~/.ntfy_token chmod 600 ~/.ntfy_tokenyour_bearer_token_here替换为你在服务端创建的 token注意chmod 600只会收紧你自己文件的读写权限不影响其他内容。之后在脚本的 curl 命令上加Authorization: Bearer请求头即可。优先级和 emoji 标签是客户端行为优先级表中标注适用于 Android、Apple、Firefox 客户端不同客户端的呈现可能不同。示例来源的局限examples.md 的作者说明其中许多示例来自社区贡献不保证全部可用很多自己也没试过。上 cron 前务必按上一节手动验证一次成功和失败两条路径。【免费下载链接】ntfySend push notifications to your phone or desktop using PUT/POST项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表