目录
前言
机器A想要同步机器B某个路径下的文件,可以先配置机器A免密登录机器B,然后再通过rsync进行同步,并将rsync同步命令加到定时任务中。
一、机器A免密登录机器B
1. 在机器A创建ssh key
输入ssh-keygen ,按三次Enter,在 /root/.ssh/ 目录下会生成公钥(id_rsa)和私钥(id_rsa.pub)
ssh-keygen
2. 将机器A的 id_rsa.pub 公钥内容追加到机器B的 /root/.ssh/authorized_keys 文件中
输入 ssh-copy-id root@机器B的IP ,需要输入机器B的密码
ssh-copy-id root@机器B的IP,例如:ssh-copy-id root@172.16.10.10
此时在机器B的 /root/.ssh/ 下会新增了文件:authorized_keys
3. 修改机器B的文件权限
chmod 700 /root/
chmod 700 /root/.ssh/
chmod 600 /root/.ssh/authorized_keys
注意:如果不修改机器B的文件权限的话,会出现:机器A使用 ssh root@机器B的IP 还是需要输入密码,查看机器B的日志(tail -200f /var/log/secure),会有打印:Authentication refused: bad ownership or modes for directory /root
4. 机器A通过SSH免密登录机器B
输入:ssh root@机器B的IP
ssh root@机器B的IP,例如:ssh root@172.16.10.10
二、通过rsync进行同步
1. 机器A和机器B均安装rsync
yum install -y rsync
2. 机器B的文件同步到机器A
/usr/bin/rsync -avH -P root@机器B:路径B的路径 机器A的路径 &> /dev/null,例如:
/usr/bin/rsync -avH -P root@172.16.10.10:/home/file1/ /home/file1/ &> /dev/null
三、将rsync同步命令加到定时任务
1. 创建定时任务
crontab -e
输入你想定时执行的命令,例如每5分钟执行一次机器B的/home/file1目录同步到机器A的/home/file1
*/5 * * * * /usr/bin/rsync -avH -P root@172.16.10.10:/home/file1/ /home/file1 &> /dev/null
wq保存退出(和vi命令的保存退出相同)
补充 crontab 文件语法(参考链接:Linux之crontab -e定时任务_crontab-e_不忘初心fight的博客-CSDN博客):
分 小时 日 月 星期 命令
几个特殊符号的含义:
“*”代表取值范围内的数字,
“/”代表”每”,
“-”代表从某个数字到某个数字,
“,”分开几个离散的数字
30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
*/15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。 ]
2. 启动定时执行
systemctl start crond
systemctl enable crond
3. 查看crond日志
crontab的运行日志可以在 /var/log/cron.log 文件中,如果没有/var/log/cron.log文件,试一下 /var/log/cron 。
(参考链接:linux crontab使用及日志查看_crontab 日志_ximi_xuexi的博客-CSDN博客)
4. 验证
在机器B的 /home/file1 目录下增加文件1,5分钟后在机器A的 /home/file1 目录下上查看是否同样新增了文件1,新增则表示同步成功。