如何使用Unison在服务器之间同步文件?
本教程将向您展示如何在Debian系统上设置和使用Unison文件同步工具。使用Unison,您可以在同一系统中的两个不同磁盘或目录之间,或通过网络在两个其他系统之间同步文件。
如何在Debian 10上安装Unison
Unison是一种流行的工具;因此,可以在主要Linux发行版的官方存储库中找到它。
要在Debian上安装Unison的命令行版本,请开始更新系统:
sudo apt-get update && sudo apt-get upgrade
接下来,使用简单的apt to命令安装该工具。
sudo apt-get install unison -y
如果您的系统上安装了桌面环境,并且希望使用该工具的GUI版本,请使用以下命令安装unison-gtk:
sudo apt-get install unison-gtk
注意:确保在要在它们之间同步文件的两个版本的系统上安装Unison。为了实现兼容性并最大程度地减少出错的可能性,最好在两个系统中都使用相同版本的Unison。
如何与Unison同步文件
Unison为我们提供了使用直接套接字连接和SSH在本地计算机和远程计算机之间同步文件和目录的方法。由于我们正在两个Debian服务器之间进行同步,因此我们将跳过本地计算机同步。
通过SSH进行Unison远程和远程同步
要在远程计算机之间同步文件和目录,您将需要在两个系统中都安装Unison,并具有对系统及其IP地址的SSH访问权限。
您还可以将本地计算机用作一台服务器,将远程设备用作另一台服务器。
192.168.0.200 –服务器1
192.168.0.201 –服务器2
第一步是在远程服务器上创建私钥和公钥。

快速跳过密钥生成过程并保存文件。请不要添加密码,因为它会阻碍服务器之间的不受监控的同步。
接下来,使用以下命令将密钥从server1复制到server2:
ssh-copy-id 192.168.0.201
现在,您都在两个系统上都设置了SSH,可以启动Unison同步文件和目录。
让我们通过创建将在server1上同步的目录来测试两台服务器上Unison的使用:
mkdir -p /dir1
在server2上,创建一个以上目录
mkdir -p /dir2
如前所述,Unison尊重用户权限。因此,最好更改两个目录中的权限和所有权,以确保两个目录都具有读取和写入权限。
接下来,在目录dir1中添加所有希望在服务器之间同步的数据。例如,添加一些zip文件。
sudo mv ~/Documents.zip /dir1
有了这些文件,我们希望在正确的目录中进行同步,运行unison命令以从服务器之一进行同步,如下所示:
unison /dir1 ssh://192.168.0.201//dir2
在首次发布Unison时,您会收到一条警告,通知您同步过程可能需要一段时间。如果目录中有大文件,这可能需要一段时间,但是由于我们仅将其用于测试目的,因此它应该相对较快。
按Enter开始同步过程。同步过程完成后,转至server2,导航至dir2,并将目录内容列出为:
cd /dir2 && ls -la
-rw-r--r-- 1 root root 436 Jan 5 12:57 Documents.zip
修改Unison配置
在大多数情况下,我们不希望在这些服务器之间以交互方式同步文件,因为该过程重复且效率低下。我们可以编辑Unison配置文件以允许自动同步文件。
使用以下命令来编辑默认配置文件:
sudo vi ~/.unison/default.prf
在文件中,添加以下行:
auto=true
batch=true
以上各行在同步文件时禁用了提示,从而使过程自动化。
设置Unison Cronjob
可以肯定的是,程序员非常反对手动执行操作,尤其是在可以实现自动化的情况下(在这里就是这种情况)。我们可以为Unison设置一个cronjob以自动执行同步。
在server1中,创建一个简单的bash脚本以如下方式运行统一命令:
sudo touch /usr/bin/unisoncron && sudo vi /usr/bin/unisoncron
在文件中,以shebang开头并添加统一同步命令:
#!/bin/bash/
unison /dir1 ssh://192.168.0.201//dir2
与往常一样,使脚本具有执行权限:
sudo chmod 755 /usr/bin/unisoncron
现在使用crontab编辑您的cronjob文件:
sudo crontab -e
如果这是您第一次编辑crontab,请选择编辑器,然后输入以下行以每1小时与Unison同步一次:
*/60 * * * * /usr/bin/unisoncron &> /dev/null
您还可以将crontab设置为在一天的特定时间运行。您也不需要使用脚本,可以在crontab中使用原始命令。
本教程向您展示了如何在Debian系统上安装和设置Unison以进行文件和目录同步。