RSYNC 自动同步文件免密

article/2025/10/8 3:03:52

rsync 免密方式自动同步文件:

rsync的客户端方式能够自动同步文件,非常方便,但是它在远程拷贝文件之前提示还需要输入一个密码,要实现脚本自动拷贝,必须要优化掉这个步骤,让rsync以密码文件的方式工作,就不需要再手工输入密码了,但密码文件的方式工作需要两步简单的配置

环境说明:

suse安装后自带rsync命令程序,使用最简单的客户端方式工作。

备份机:192.168.11.25, 同步文件的目的地。

服务器:192.168.11.24, 同步文件的数据源,一般是从服务器拷贝数据去备份。

命令:

一、在备份机192.168.0.1上产生密码文件,有了这个文件,我们就可以不再手动输入密码了:

ssh-keygen

输入这个命令之后 一路回车  yes

二、拷贝这个密码文件到服务器主机上:

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.11.24

 

三、就这么简单,我们在备份机上用rsync同步命令试试,果然再不需要手工输入密码了:

#没有斜杠/
rsync -av 192.168.11.24:/home/runner/pbmonitor  /usr/local/rsync/   #同步文件夹 pbmonitor
#有斜杠/
rsync -av 192.168.11.24:/home/runner/pbmonitor/  /usr/local/rsync/  #不同步文件夹 pbmonitor

四、我们把这个命令加到定时脚本中,让备份服务器自动每天从服务器主机上同步一次文件。

五、我们不能让备份机上的文件无休止的增长,需要脚本命令删除掉10天前的文件:

find  /usr/local/rsync/*  -mtime +10 -exec rm -f {} \;

六、安装Inotify-tools实时触发rsync进行同步

这里可以参考github上的官方wiki文档(包含安装及配置使用示例)

Home · inotify-tools/inotify-tools Wiki · GitHub

1、先安装epel源

yum install -y epel-release && yum update

1、下载安装Inotify-tools

# uname -r        #Linux下支持inotify的内核最小为2.6.13
2.6.32-642.el6.x86_64# 安装前要先下载epel源
# yum install inotify-tools -y查看其程序是否安装成功
# rpm -qa inotify-tools
inotify-tools-3.14-1.el6.x86_64查看程序包含的文件
#rpm -ql inotify-tools
/usr/bin/inotifywait
/usr/bin/inotifywatch
/usr/lib64/libinotifytools.so.0
/usr/lib64/libinotifytools.so.0.4.1
/usr/share/doc/inotify-tools-3.14
/usr/share/doc/inotify-tools-3.14/AUTHORS
/usr/share/doc/inotify-tools-3.14/COPYING
/usr/share/doc/inotify-tools-3.14/ChangeLog
/usr/share/doc/inotify-tools-3.14/NEWS
/usr/share/doc/inotify-tools-3.14/README
/usr/share/man/man1/inotifywait.1.gz
/usr/share/man/man1/inotifywatch.1.gz

2、配置inotify-tools

# sysctl -a|egrep -i "max_queued_events|max_user_watches|max_user_instances"    #修改inotify默认参数(inotify默认内核参数值太小)
fs.inotify.max_user_instances = 128
fs.inotify.max_user_watches = 8192
fs.inotify.max_queued_events = 16384
fs.epoll.max_user_watches = 201420# vim /etc/sysctl.conf 添加
fs.inotify.max_queued_events = 99999999
fs.inotify.max_user_watches = 99999999
fs.inotify.max_user_instances = 65535#sysctl  -p   参数立即生效# cat /proc/sys/fs/inotify/{max_user_instances,max_user_watches,max_queued_events}  #检查参数是否生效
65535
99999999
99999999注释:max_queued_events:inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确max_user_watches:要同步的文件包含多少目录,可以用:find /app/rsync_server/ -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/app/rsync_server/为同步文件目录)max_user_instances:每个用户创建inotify实例最大值

3、创建实时同步脚本

# vim  /usr/local/inotify/rsync.sh
#!/bin/bash
src_dir="/app/rsync_server/"
dst_dir="app_rsync_client"
exclude_dir="/usr/local/inotify/exclude.list"
rsync_user="rsync"
rsync_passwd="/etc/passwd.txt"
dst_ip="192.168.0.45"
rsync_command(){rsync -avH --port=873 --progress --delete --exclude-from=$exclude_dir $src_dir $rsync_user@$ip::$dst_dir --password-file=$rsync_passwd
}
for ip in $dst_ip;dorsync_command
done/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $src_dir \
| while read file;dofor ip in $dst_ip;dorsync_commandecho "${file} was rsynced" >> /tmp/rsync.log 2>&1donedone 注释:src_dir="/app/rsync_server/"    #源服务器同步目录dst_dir="app_rsync_client"    #目标服务器rsync同步目录模块名称exclude_dir="/usr/local/inotify/exclude.list"    #不需要同步的目录,如果有多个,每一行写一个目录,使用相对于同步模块的路径;例如:不需要同步/app/rsync_server/"目录下的a目录和b目录下面的b1目录,exclude.list文件可以这样写a/b/b1/rsync_user="rsync"    #目标服务器rsync同步用户名rsync_passwd="/etc/passwd.txt"    #目标服务器rsync同步用户的密码在源服务器的存放路径dst_ip="192.168.0.45"    #目标服务器ip,多个ip用空格分开
##赋权,添加开机启动# chmod +x /usr/local/inotify/rsync.sh
# touch /usr/local/inotify/exclude.list
# vim /etc/rc.d/rc.local
nohup /bin/sh /usr/local/inotify/rsync.sh &
# nohup /bin/sh /usr/local/inotify/rsync.sh &

4、测试

在rsync_server(数据源)192.168.0.44的/app/rsync_server创建文件
# cd /app/rsync_server
# touch test{1..9}
# touch test{a..j}
# ls
test1  test2  test3  test4  test5  test6  test7  test8  test9  testa  testb  testc  testd  teste  testf  testg  testh  testi  testj在rsync_client(目标端)192.168.0.45上查看已经同步
# cd /app/rsync_client
# ls
test1  test2  test3  test4  test5  test6  test7  test8  test9  testa  testb  testc  testd  teste  testf  testg  testh  testi  testj


http://chatgpt.dhexx.cn/article/i5kUpWDR.shtml

相关文章

字符串旋转(C#)

字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 来源:力扣&#xff08…

【关于字符串旋转问题】

题目一: 实现一个函数可以左旋字符串中的k个字符 例如: 字符串“ABCDEF”左旋一个字符得到“BCDEFA” 字符串“ABCDEF”左旋两个字符得到“CDEFAB” 思路: 如果要旋转一个字符,可以先将第一个字符放在临时变量中,在把后…

旋转字符串⭐

文章目录 1. 问题描述2. 问题示例3.代码实现4. 运行结果 总结 1. 问题描述 给定一个字符串(以字符数组的形式)和一个偏移量,根据偏移量原地从左向右旋转字符串 2. 问题示例 输入 str “abcdefg”,offset 3,输出"efgabcd"输入 …

旋转字符串,判断字符串是否为旋转而来

题目 1、实现一个函数,可以左旋字符串中的k个字符。 ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 2、.判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如: 给定s1 AABCD和s2 BCDAA,返回1 给定s1 abcd 和 s2 ACBD…

旋转字符串(java)

问题描述: 给定两个字符串, s 和 goal。如果在若干次旋转操作之后,s 能变成 goal ,那么返回 true 。s 的 旋转操作 就是将 s 最左边的字符移动到最右边。 若 s ‘abcde’,在旋转一次之后结果就是’bcdea’ 。 样例输入: 代码如下…

2021-02-12:如何判断两个字符串是否互为旋转字符串?

2021-02-12:如何判断两个字符串是否互为旋转字符串? 福哥答案2021-02-12: 假设字符串str1是“ABCDE”,字符串str2是“CDEAB”。字符串str2可以拆分成“CDE”和“AB”,可以拼成“ABCDE”。所以str1和str2互为旋转字符…

字符串旋转问题详解

题目名称: 字符串左旋 题目内容: 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法一:暴力求解 这种方法相对比较容易,我们先来看看代码&…

Python——旋转字符串

题目描述 给定两个字符串s和goal,如果在若干次旋转操作后s能够变成goal,那么就返回True s的旋转操作就是把s最左面的字符放到最右面 例如: s ‘abcde’ 旋转一次就是‘bceda’ 而如果goal是bceda,那么goal就是s的旋转字符串 P…

【旋转字符串的四种方法】

目录: 前言一、题目描述二、题目解析(一)依次左旋(二)创建中间数组(三)三次倒置(四)接长数组 总结 前言 来源:力扣(LeetCode) 旋转字符…

Android 实时监听APP进入前台或后台

下面已更新说明 前言 在我们开发的过程中,经常会遇到需要我们判断app进入后台,或者切换到前台的情况。比如我们想判断app切换到前台时,显示一个解锁界面,要求用户输入解锁密码才能继续进行操作;我们想判断app切换到后…

什么是后台

什么是后台? 后台指的是运行在后台并且控制着前端的内容,它主要负责程序设计架构思想,管理数据库等。后台更多的是应用到数据库并且进行交互以处理相应的业务逻辑。它需要考虑的是如何实现功能、数据的存取、平台的稳定性与性能等方面。需要参…

Android后台应用开启前台服务---android8到android12梳理

以下内容都是针对start方式启动的service,而非bind启动的srevice。因为bind启动的服务生命周期始于Activity绑定在一起的,会随Activity的销毁而停止。但start方式启动的service独立的,即使应用销毁它也可以继续运行,故Android系统…

关闭后台App刷新后台应用刷新是做什么的

官方解释 “后台应用刷新” 是什么作用(如图) 关闭后台应用刷新,并不会影响到消息接收(因为消息接收是通过Apple Push Notification机制来的)省电模式默认全部应用都关闭刷新(说明关闭可以省电&#xff09…

Android——后台服务

Android应用编程实验 实验名称:Android 后台服务 实验目的:通过Service设计后台服务程序,通过Broadcast实现信息广播机制 实验内容: 设计一个简单的后台音乐服务程序;设计一个简单的信息广播程序示例;利用B…

Android应用后台网络管控机制

应用后台网络管控机制 概述 在维护手管应用时,经常遇到与应用后台网络控制相关的问题,在解决这些问题的过程中,学习了下应用后台网络控制的流程以及一些日志的分析方法,现在把它总结一下,方便自己以及他人的学习。 网…

Android将后台应用唤起到前台的方法

在我们开发的过程中,经常遇到app进入后台,或者切换到前台的情况。 比如: 从后台切换到前台显示全屏广告实践来电显示从后台切换到前台 如图显示:压后台10秒钟,自动弹出 实现主要分为两个步骤: 第一步通…

后台功能

#🌌 后台功能 后台功能模块,包含主控面板,开发管理,日志管理,系统监控,通知公告,文件管理,定时任务。 #1. 主控面饭 主控面板展示了系统的一些统计信息,采用默认的ant…

如何让应用保持后台运行,做到保活?

其实,我们无法做到真正意义上的保活,应为系统进程会自动杀死占用过大内存的某个应用。 但我们还有一种选择,就是过滤该应用的包名,做到后台任务键清理不掉它,单独去除不掉它,只有返回键才能做到真正的退出…

【已解决】Android 如何让应用在后台运行

应用在后台跑,这种说法可能不够准确,就是说应用没有finish退出,但也不在前台的状态,例如应用执行中点击了home键一样。如何实现呢? 要点: 退回后台是执行了home键,activity分别执行了onPause和…

如何让安卓APP一直在后台运行?

本文摘自微信公众号“android高心星的私塾” 一 声明 1 网上很多的保活手段,但是不靠谱的居多 2 本文只是进行保活知识的推广,不是在教你做永生不死的进程 二 保活手段 1 业界保活手段:黑色保活,灰色保活,白色保活 2…