我们有一个每晚在多个 Linux 和 Darwin (Macintosh) 系统上运行的进程来备份文件系统对象。我们还使用 -repeat=watch 选项运行统一文件同步,以便同步尽可能保持最新。
我们的目标是在备份窗口之前正常关闭一致进程,然后重新启动它们。kill -SIGTERM
目前,我们在启动每个同步进程的系统上使用相对不优雅的方法。虽然这有效,但并不理想,我希望有一种有序的方法来做到这一点,但我可能错过了。(例如,必须仔细阅读文档才能发现 SIGUSR1 可用于关闭日志文件,因此我希望同样有另一个 SIG* 可用于此目的。
将其合并到我们的系统关闭过程中也很好。
目前可以做到这一点(MAC版本是“unison version 2.53.3(ocaml 4.14.0)”;unix(UBUNTU)版本是“unison version 2.48.4”。)如果没有优雅的方式,我将制作该功能要求。
根据工会手册,礼貌的停止观看信号是 SIGUSR2。
它有一个 SIGTERM 处理程序来优雅地退出。一般来说,对于与文件相关的工具,清理意味着删除复制未完成的临时文件,并解锁所有资源。
实现并测试发送 SIGUSR2 的脚本,等待一段时间,如果仍在运行,则发送 SIGTERM。例如,如果在 Linux 服务上使用 systemd,ExecStop 脚本可以发送此信号,稍等一下,然后检查同步状态。然后,来自服务管理器的通常 TERM 信号将确保其关闭。确认您的文件集完好无损。同步程序崩溃一致并不一定意味着您的文件都在同一时间点。
似乎您有一个独立于同步过程的备份方法,这很好。
我认为仅像这样的同步不足以作为备份。好的备份是离线的、不可变的,并且备份到不同的介质上。如果意外或恶意软件将不良数据写入一侧,则会将其同步到另一侧。与仅仅从一棵树中制作存档相比,同步冲突解决可能会带来复杂性。
独立的备份方式还可以确保您对文件同步过程的更改不会导致数据丢失。最坏的情况是,获取备份存档,并安全地防止写入。