ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ntfy 如何用 CLI 订阅主题并为每条消息执行自定义命令

ntfy 如何用 CLI 订阅主题并为每条消息执行自定义命令 ntfy 如何用 CLI 订阅主题并为每条消息执行自定义命令【免费下载链接】ntfySend push notifications to your phone or desktop using PUT/POST项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy当你希望某条 ntfy 消息到达时机器上能自动跑一段处理逻辑弹桌面通知、执行脚本、记录日志可以借助 ntfy CLI 完成。ntfy 的服务器端和客户端是同一个ntfy二进制CLI 内置了ntfy subscribe命令它有两种工作模式ntfy subscribe TOPIC把每条到达的消息以 JSON 打印出来ntfy subscribe TOPIC COMMAND则对每条消息执行一次 COMMAND并把消息字段以环境变量形式传给该命令。本文覆盖安装 CLI、为每条消息挂载命令、用一条测试消息验证以及如何同时订阅多个主题、以 systemd 服务常驻运行。一、安装 ntfy CLI适用环境Linuxamd64、armv6、armv7、arm64、macOS、Windows。注意 macOS 上只支持 CLIntfy publish和ntfy subscribe不支持运行 ntfy 服务器。主路径是 Linux 二进制包以 amd64 为例版本 v2.27.0来自 安装文档wget https://github.com/binwiederhier/ntfy/releases/download/v2.27.0/ntfy_2.27.0_linux_amd64.tar.gz tar zxvf ntfy_2.27.0_linux_amd64.tar.gz sudo cp -a ntfy_2.27.0_linux_amd64/ntfy /usr/local/bin/ntfysudo cp会把二进制安装到/usr/local/bin/ntfy只需前两条命令即可用于 CLI 订阅安装文档中同一小节末尾的sudo ntfy serve是用于启动服务器只使用 CLI 时不需要执行。其他可选安装方式详见 安装文档Debian/Ubuntu 或 Fedora/RHEL 官方源/仓库安装会同时部署服务器服务brew install ntfyHomebrew 提供的仅是 CLI支持 Linux 和 macOSWindows 下载 ZIP 或scoop install ntfy。二、客户端配置文件可选安装后可选地创建客户端配置位置因平台和用户而异Linux 非 root 用户~/.config/ntfy/client.ymlLinux root 用户/etc/ntfy/client.ymlmacOS 非 root 用户~/Library/Application Support/ntfy/client.ymlWindows%AppData%\ntfy\client.yml仓库内的 配置骨架 带完整注释可直接拷下来改。如果订阅的是 ntfy.sh 公共服务器配置文件可以不改如果自建了服务器需要修改default-host它用于展开ntfy publish和ntfy subscribe中的短主题名# Base URL used to expand short topic names in the ntfy publish and ntfy subscribe commands. default-host: https://ntfy.myhost.com其中https://ntfy.myhost.com是文档示例地址替换为你自己服务器的实际地址。三、订阅主题并执行命令ntfy subscribe别名sub的调用方式决定行为1. 先以 JSON 流查看消息ntfy subscribe TOPICTOPIC是主题名。这样运行时每条到达的消息都会打印出它的 JSON 表示适合后面接一个想流式读取 JSON 的命令。除非传了--poll该命令会一直挂起不退出加--poll则只查询最新消息后退出可在脚本中使用。文档示例输出如下文档示例$ ntfy sub mytopic {id:nZ8PjH5oox,time:1639971913,event:message,topic:mytopic,message:hi there} {id:sekSLWTujn,time:1639972063,event:message,topic:mytopic,priority:5,message:Oh no!} ...2. 为每条消息执行一条自定义命令ntfy subscribe TOPIC COMMAND这样运行时每来一条消息就执行一次 COMMAND。文档给出的几个例子ntfy sub mytopic notify-send $m ntfy sub topic1 /my/script.sh ntfy sub topic1 echo Message $m was received. Its title was $t and it had priority $p消息字段以环境变量传给命令可在脚本里直接使用变量别名说明$NTFY_ID$id唯一消息 ID$NTFY_TIME$time消息送达的 Unix 时间戳$NTFY_TOPIC$topic主题名$NTFY_MESSAGE$message、$m消息正文$NTFY_TITLE$title、$t消息标题$NTFY_PRIORITY$priority、$prio、$p消息优先级1最低5最高$NTFY_TAGS$tags、$tag、$ta消息标签逗号分隔列表$NTFY_RAW$raw原始 JSON 消息这些是环境变量通常不需要过多担心引号问题——只要用双引号包住变量引用即可。3. 验证发一条测试消息在另一个终端用ntfy publish别名pub、send、trigger向同一主题发一条消息文档示例ntfy publish mytopic This is a message判断标准JSON 模式下订阅终端会多打印一行包含该消息内容的 JSON命令模式下COMMAND 会被执行一次例如上面的echo例子会输出类似Message This is a message was received.的结果notify-send $m则会弹出一条桌面通知。如果始终没有任何输出先确认两端连的是同一个服务器default-host是否一致以及主题名是否相同。四、同时订阅多个主题--from-config当需要一次订阅多个主题、且每个主题执行不同命令时用配置模式ntfy subscribe --from-config该命令读取配置文件中的subscribe配置块。下面的例子改编自 配置骨架 中的注释示例default-host: https://ntfy.sh default-user: phill default-password: mypass subscribe: - topic: mytopic command: /usr/local/bin/mytopic-triggered.sh - topic: myserver.com/anothertopic command: echo $message if: priority: high,urgent - topic: secret command: notify-send $m user: phill password: mypass - topic: token_topic token: tk_AgQdq7mVBoFD37zQVN29RhuMzNIz2各订阅项的含义command是该主题收到的消息要执行的命令可以是脚本路径也可以是内联 shell 脚本订阅文档 给出了一个多行内联脚本读取 CPU 温度并输出告警的完整例子if是过滤器可按message、title、priority逗号分隔列表逻辑或和tags逗号分隔列表逻辑与过滤消息例如上面的priority: high,urgent表示只有 high 或 urgent 优先级的消息才触发命令。如果大部分或全部订阅使用相同凭据可在client.yml中设置default-user和default-password或default-token二者不能同时设置还可以设置default-command当某个订阅没有提供命令时使用它作为默认命令。订阅自身的 user/password/token 或 command 会覆盖默认值。文档在这里有一条明确警告default-user、default-password和default-token会发送给每个没有自带凭据的主题即使该主题不需要认证所以要确保所订阅的服务器/主题使用 HTTPS防止用户名密码泄露。五、让订阅常驻ntfy-client systemd 服务可选如果希望订阅在开机或登录后自动运行可以使用仓库内的ntfy-clientsystemd 服务单位文件见 系统服务 和 用户服务。二者默认都不启用需要手动启用。系统服务以ntfy用户运行开机启动。编辑/etc/ntfy/client.yml后以 root 执行sudo systemctl enable ntfy-client sudo systemctl restart ntfy-client系统服务受常规 Linux 权限限制不能在你的 X 会话里以主用户身份执行命令即无法调用notify-send弹桌面通知。用户服务在用户登录桌面环境时运行能访问桌面环境可执行notify-send和用户主目录下的命令。编辑~/.config/ntfy/client.yml后执行不加 sudosystemctl --user enable ntfy-client systemctl --user restart ntfy-client所以需要桌面通知或依赖用户目录的脚本选用户服务只需静默执行命令写日志、调脚本系统服务即可。六、订阅需要认证的主题按需如果服务器启用了访问控制部分主题的读/写受保护只有持正确凭据的用户能订阅。此时用 Basic Authntfy subscribe \ -u phil:mypass \ ntfy.example.com/mysecrets-u后是username:password主题名前面可带服务器主机以指向别的服务器。自建服务器场景下文档特别提醒务必使用 HTTPS避免被窃听暴露密码。也可以把凭据写进配置的单个订阅项里- topic: secret command: notify-send $m user: phill password: mypass另外client.yml的subscribe配置块也支持在每个订阅项上单独指定token用于以访问令牌认证的主题。七、边界与限制不传--poll时ntfy subscribe会一直挂起需要取一次最新就退出的脚本场景使用--poll。macOS 只有 CLI 可用不能在上面运行 ntfy 服务器服务器需要部署在 Linux 或 Windows 上。系统服务systemd system service无法在用户的 X 会话中执行命令需要桌面交互时改用用户服务。设置默认凭据后凭据会对所有未自带凭据的订阅生效文档要求所订阅的服务器/主题使用 HTTPS。CLI 并不是收发消息的唯一方式消息也可以用curl直接发送见 发布文档订阅也可走 HTTP API是否选 CLI 取决于使用场景。【免费下载链接】ntfySend push notifications to your phone or desktop using PUT/POST项目地址: https://gitcode.com/GitHub_Trending/nt/ntfy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表