要将本地文件同步到远程服务器,你可以使用 rsync 命令。下面是如何在后台运行并定期同步的步骤:
安装 rsync 命令
如果你的系统上没有 rsync 命令,可以使用以下命令进行安装:
Ubuntu/Debian
sudo apt-get update
sudo apt-get install rsync
CentOS/RHEL
sudo yum install rsync
编写同步脚本
将以下内容保存为一个脚本文件,例如 sync.sh
:
#!/bin/
rsync -avz --delete /path/to/local/folder/ user@remote.host:/path/to/remote/folder/
其中:
-a 选项表示以归档模式同步,保留文件权限、所有者、组等信息。
-v 选项表示以详细模式输出同步过程。
-z 选项表示启用压缩传输,可以加快传输速度。
--delete 选项表示删除远程文件夹中本地文件夹没有的文件。
你需要将 /path/to/local/folder/ 替换为本地要同步的文件夹路径,user 替换为远程服务器的用户名,remote.host 替换为远程服务器的地址,/path/to/remote/folder/ 替换为远程服务器上要同步到的文件夹路径。
添加定时任务
你可以使用 crontab 命令添加定时任务,例如每小时同步一次。打开终端并输入以下命令:
crontab -e
在打开的编辑器中添加以下内容
0 * * * * /bin/ /path/to/sync.sh >/dev/null 2>&1
其中:
0 * * * * 表示每小时的 0 分钟执行一次同步任务。你可以使用 crontab guru 来生成自己需要的定时任务表达式。
/bin/ 表示使用 解释器来执行脚本。
/path/to/sync.sh 替换为实际的同步脚本文件路径。
/dev/null 2>&1 表示将所有输出重定向到 /dev/null,以避免在终端输出日志。
保存并关闭编辑器,定时任务就会生效。
后台运行同步脚本
你可以使用 nohup 命令在后台运行同步脚本,即使退出终端也可以继续执行。在终端中输入以下命令:
nohup /bin/ /path/to/sync.sh &
其中:
nohup 表示忽略终端关闭信号,让程序在后台运行。
& 表示将程序放在后台运行。
rsync 实现实时同步的用法
要实现实时同步,可以使用 rsync 的 --inplace 和 --update 参数。--inplace 参数会将本地文件直接写入到远程服务器,而不是先将文件传输到远程服务器,再将其写入到磁盘上。--update 参数会只同步更新的文件,而不会同步所有文件。
以下是实现实时同步的示例命令:
rsync -avz --inplace --update /path/to/local/folder user@remote:/path/to/remote/folder
这将使用归档模式同步本地 /path/to/local/folder 目录到远程服务器的 /path/to/remote/folder 目录中,同时使用 -z 参数启用压缩模式传输文件。--inplace 参数将在本地和远程服务器之间直接写入文件,而不是先将文件传输到远程服务器,然后再写入到磁盘上。--update 参数会只同步更新的文件,而不会同步所有文件。
注意:使用实时同步会增加网络和磁盘 I/O 的负载,因此应该谨慎使用,并考虑使用其他解决方案,如分布式文件系统、对象存储等。
rsync远程传输避免密码输入
免密登录:确保本地和远程服务器已经建立了免密登录。可以使用 ssh-keygen
命令生成本地的 SSH 密钥,并将公钥添加到远程服务器上的 authorized_keys
文件中。
每次rsync远程传输时都需要输入用户在远程机器上的密码,这样导致无法在后台自动运行rsync,可采用秘钥文件来替代人工输入密码的方式来解决。
第一步 在本地机器上使用ssh-keygen -t rsa 生成秘钥(一路回车即可)
[root@xxxx ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): /usr/rsync_id_dsa
Enter passphrase (empty for no passphrase): //输入空
Enter same passphrase again: //输入空
Your identification has been saved in /usr/rsync_id_dsa.
Your public key has been saved in /usr/rsync_id_dsa.pub. 注意: 在提示输入key file path时,为避免覆盖已有的root帐户的id_rsa文件,将其存储到/usr/rsync_id_dsa 在提示输入文件密码时,直接按回车,采用空密码 最后生成了两个文件,分别存储私钥和公钥
第二步 将本地机器上的公钥传送到远端机器对应账户的.ssh目录下 (以csdn为例)
$ scp /usr/rsync_id_dsa.pub root@171.69.201.209:/home/csdn/.ssh
第三步 在远程机器上将得到的公钥导入对应账号的authorized_keys文件中 (以csdn为例)
$ cd /home/csdn/.ssh
$ cat rsync_id_dsa.pub >> authorized_keys # 使用 >> 防止覆盖 这样可以实现多个客户端的免密码登录
$ chown csdn:csdn authorized_keys # 不是必须
设置完成后,每次使用rsync时,添加 -i 参数 就可以避免每次输入密码了
$rsync -e "ssh -i /usr/rsync_id_dsa" /tmp/testfile csdn@remotehost:/tmp/
#rsync -av -e "ssh -i /usr/rsync_id_dsa" /orcl// csdn@61.132.54.173:/usr/test