一天一个信号运行可防止断开连接

主要内容总结:

  • 内容结构:包含High-level sketchChecking 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 为何不同步消息历史,认为这是自动化周期性任务的有趣实践,文末提到博客及支持方式。
阅读 14
0 条评论