主要内容总结:
- 内容结构:包含High-level sketch、Checking connectivity等多个部分,介绍了保持 Signal 连接的程序及其在不同系统上的安装和运行方式。
- 程序目的:因 Signal 设计导致长时间不活动会断开设备连接,作者编写程序每天运行 Signal 一次以避免此问题,同时希望程序输出便于调试。
- High-level sketch:运行 Signal 5 分钟,确保至多一次语义(通过文件系统实现),等待网络连接(10 分钟),启动 Signal 并等待 5 分钟让其同步消息,最后停止 Signal 并记录日志。
- Checking connectivity:最简单方式不做连接检查,作者选择使用 HTTP 检查连接,通过
http.Get
请求特定网站来判断是否在线,未使用指数退避算法。 - Ensuring at-most-once semantics:通过在创建程序日志文件时指定
O_EXCL
标志实现至多一次语义,将标准库log
包输出重定向到日志文件。 - Full program code:提供了完整的 Go 语言程序代码,包含各种功能函数和主函数
main
,可用于实现 Signal 保持连接的功能。 - macOS installation: launchd:在 macOS 上使用
launchd
,通过配置StartCalendarInterval
使其每天 08:03 运行程序,安装和测试时需将 plist 文件复制到~/Library/LaunchAgents
并执行相关命令。 - In practice:实际运行中,计算机未在 08:03 运行,但在 08:18 唤醒后开始运行程序,运行期间进行了 Signal 相关操作,最后在 08:47 停止。
- Linux installation: systemd:在 Linux 上使用
systemd
,需要两个单元,signal-keepalive.service
声明运行程序,signal-keepalive.timer
自动每天启动该服务,Persistent=true
确保计算机睡眠时也运行程序。 - Conclusion:作者认为因使用 Signal 不频繁而需如此麻烦很可笑,不理解 Signal 为何不同步消息历史,认为这是自动化周期性任务的有趣实践,文末提到博客及支持方式。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。