一句话总结:Crier 是一款使用 Rust 编写的极简推送通知工具,它支持 TCP(局域网直连)与 MQTT(互联网中继)两种模式,通过简单的命令行即可实现服务器、CI/CD 流程或脚本完成时的即时通知。
开篇:告别低效等待,让自动化流程主动“说话”
在开发与运维工作中,我们常常陷入被动的等待:
- 长时间编译或数据处理任务运行时,不得不守在终端前反复查看状态。
- 部署在远程服务器上的脚本执行完毕后,由于未设置有效提醒而错过关键结果。
- 配置复杂的 Webhook 或消息机器人,只为获得一个简单的完成信号,导致通知系统比主业务逻辑更为繁琐。
我们需要的往往不是一个重型通知平台,而是一个能随时随地、简单可靠地“喊”我们一声的工具。Crier 正是为此而生。它轻量、跨平台,通过一行命令监听,另一行命令发送,并能在通知触发时执行任意 Shell 命令,实现弹窗、播放声音或调用自定义脚本等丰富反馈。
一、Crier 是什么?一个轻量级的“数字信使”
Crier 的核心设计哲学极其简洁:发送端发布一条文本消息,接收端则执行一条预定义的命令。它通过两种通信模式适应不同场景:
- TCP 模式:适用于同一局域网内的设备间通信,延迟极低,无需中间服务器。
- MQTT 模式:借助 MQTT Broker 进行消息中继,完美解决跨网络、无公网 IP、防火墙穿透等问题,实现互联网范围的通知。
它无需数据库与 Web 服务,仅凭一个可执行文件与一份 YAML 配置文件即可运行,将复杂度降至最低。
二、快速开始:五分钟部署与体验
安装:从源码编译
由于项目使用 Rust 编写,安装过程标准且快速:
git clone https://github.com/skorotkiewicz/crier.git
cd crier
cargo build --release
编译完成后,可将生成的二进制文件 ./target/release/crier 复制到系统路径(如 /usr/local/bin/)以便全局调用。
场景一:局域网 TCP 快速通知
假设在 IP 为 192.168.1.10 的机器上设置监听,要求收到通知时弹出系统提示(Linux 环境):
# 在接收端(192.168.1.10)启动监听
crier listen 0.0.0.0:5555 -m 'notify-send "Alert" "{}"'
在局域网内的另一台机器(发送端)执行:
crier send 192.168.1.10:5555 -m "Database backup completed!"
此时,接收端的桌面将立刻弹出内容为 “Database backup completed!” 的通知窗口。命令中的 {} 是占位符,会被实际消息内容替换。
场景二:通过 MQTT 实现跨网络通知
当发送端与接收端不在同一网络时,可使用 MQTT 模式。这里以公共测试 Broker 为例:
# 在家中的电脑(接收端)订阅主题
crier listen --relay test.mosquitto.org -t my_home_topic -m 'notify-send "Remote" "{}"'
# 在公司服务器(发送端)发布消息
crier send --relay test.mosquitto.org -t my_home_topic -m "CI pipeline passed!"
双方通过连接同一个 MQTT Broker 并订阅相同主题即可通信。对于生产环境,建议使用自建的 MQTT Broker(例如通过 Docker 快速部署 Mosquitto)以保障安全性与可控性。
三、使用配置文件管理预设(Presets)
为避免重复输入复杂参数,Crier 支持 YAML 配置文件来定义预设。创建 ~/.config/crier.yml:
ci_notify:
relay: “your-broker.com”
topic: “project/ci”
auth: “your_secret_token”
message: ‘notify-send “CI Result” “{}”’
local_alert:
addr: “0.0.0.0:5555”
auth: “local_token”
message: ‘paplay /usr/share/sounds/alert.wav && echo “$(date): {}” >> ~/notify.log’
之后,即可通过 -p 参数快速调用预设,发送时还可使用 -m 参数临时覆盖预设中的消息模板:
crier listen -p ci_notify
crier send -p ci_notify -m “Deployment to production succeeded.”
四、基础安全认证
为防止未授权的客户端随意发送通知,Crier 提供了简单的 Token 认证机制。
在启动监听时设置认证令牌:
crier listen 0.0.0.0:5555 --auth my_secure_token -m ‘...’
发送端必须提供相同的令牌才能成功发送:
crier send 192.168.1.10:5555 -m “Authorized message” --auth my_secure_token # 成功
crier send 192.168.1.10:5555 -m “Malicious message” # 被拒绝
MQTT 模式同样支持此认证参数,为通知通道增加了一层基础保护。
五、超越弹窗:将通知作为自动化触发器
Crier 的核心能力在于执行任意 Shell 命令,这使得它能轻松融入各类自动化运维流程。
- 播放音效提示:
crier listen 0.0.0.0:5555 -m ‘paplay /usr/share/sounds/complete.oga’
- 记录通知日志:
crier listen 0.0.0.0:5555 -m ‘echo “[$(date +%Y-%m-%d %H:%M:%S)] {}” >> /var/log/crier.log’
- 触发复杂响应脚本:
crier listen 0.0.0.0:5555 -m ‘/opt/scripts/alert_handler.sh “{}”’
在 alert_handler.sh 脚本中,你可以解析消息内容,并根据不同关键字执行重启服务、发送邮件或上报监控系统等操作。
六、实战应用场景
- CI/CD 构建结果通知:在 Jenkins 或 GitLab CI 的 Pipeline 脚本末尾添加发送命令,构建状态即时可知。
- 家庭 NAS 任务提醒:让下载工具、备份脚本在完成任务后发送通知,配合音效与弹窗,无需手动检查。
- 服务器资源告警:结合 Cron 定时任务,检测磁盘、内存或服务状态,异常时立即通过 Crier 发送告警信息到指定终端。
七、总结
在技术栈日益复杂的今天,Crier 回归 simplicity(简洁)的设计值得称道。它用不到千行的 Rust 代码,精准地解决了“轻量级、跨网络、可编程通知”这一具体需求。无论是个人开发者还是小型团队,都可以将其作为自动化流程中可靠的“最后一环”,让机器学会在恰当的时机主动汇报,从而真正提升工作效率。