1)inotifywait+rsync脚本:

#!/bin/bash

src=/data/                           # 需要同步的源路径
des=data # 目标服务器上 rsync --daemon 发布的名称,rsync --daemon这里就不做介绍了,网上搜一下,比较简单。
rsync_passwd_file=/etc/rsyncd.passwd # rsync验证的密码文件
ip1=192.168.0.18 # 目标服务器1
ip2=192.168.0.19 # 目标服务器2
user=root # rsync --daemon定义的验证用户名
cd ${src} # 此方法中,由于rsync同步的特性,这里必须要先cd到源目录,inotify再监听 ./ 才能rsync同步后目录结构一致,有兴趣的同学可以进行各种尝试观看其效果 /usr/local/bin/inotifywait -mrq --format '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file # 把监控到有发生更改的"文件路径列表"循环
do
INO_EVENT=$(echo $file | awk '{print $1}') # 把inotify输出切割 把事件类型部分赋值给INO_EVENT
INO_FILE=$(echo $file | awk '{print $2}') # 把inotify输出切割 把文件路径部分赋值给INO_FILE
echo "-------------------------------$(date)------------------------------------"
echo $file
#增加、修改、写入完成、移动进事件
#增、改放在同一个判断,因为他们都肯定是针对文件的操作,即使是新建目录,要同步的也只是一个空目录,不会影响速度。
if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]] # 判断事件类型
then
echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'
rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} && # INO_FILE变量代表路径哦 -c校验文件内容
rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
#仔细看 上面的rsync同步命令 源是用了$(dirname ${INO_FILE})变量 即每次只针对性的同步发生改变的文件的目录(只同步目标文件的方法在生产环境的某些极端环境下会漏文件 现在可以在不漏文件下也有不错的速度 做到平衡) 然后用-R参数把源的目录结构递归到目标后面 保证目录结构一致性
fi
#删除、移动出事件
if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
then
echo 'DELETE or MOVED_FROM'
rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} &&
rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
#看rsync命令 如果直接同步已删除的路径${INO_FILE}会报no such or directory错误 所以这里同步的源是被删文件或目录的上一级路径,并加上--delete来删除目标上有而源中没有的文件,这里不能做到指定文件删除,如果删除的路径越靠近根,则同步的目录月多,同步删除的操作就越花时间。这里有更好方法的同学,欢迎交流。
fi
#修改属性事件 指 touch chgrp chmod chown等操作
if [[ $INO_EVENT =~ 'ATTRIB' ]]
then
echo 'ATTRIB'
if [ ! -d "$INO_FILE" ] # 如果修改属性的是目录 则不同步,因为同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带更新此目录。
then
rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} &&
rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
fi
fi
done

  

2)sersync2实时监控目录同步服务进程监控脚本check_sersync2.sh:

#!/bin/bash

usage() {
echo -e "\n Usage: $0 sersync_config_file"
echo -e "\nExample: $0 /usr/local/sersync/confxml.xml\n"
exit -1
} if [ $UID -ne 0 ]; then
echo -e "\nYou should run \"$0 $@\" as root.\n"
exit -1
fi if [ $# -ne 1 ] || [ ! -f $1 ] ; then
usage
fi DAEMON="/usr/local/sersync/sersync2"
CONFIG_FILE=$1
LOG_FILE="/var/log/check_sersync.log"
ARGS="-o $CONFIG_FILE -d" function start() {
echo "$DAEMON $ARGS"
$DAEMON $ARGS >/dev/null 2>&1
sleep 3
processes_num=$(status)
if [ $processes_num -eq '1' ]; then
log $LOG_FILE "sersync service start success."
else
log $LOG_FILE "sersync service start failed."
fi
} function stop() {
ps aux | grep -v grep | grep "${DAEMON}.*${CONFIG_FILE}" | awk '{printf "%s ",$2}' | xargs kill -9
processes_num=$(status)
if [ $processes_num -eq '0' ]; then
log $LOG_FILE "sersync service stop success."
else
log $LOG_FILE "sersync service stop failed."
fi
} function status() {
processes_num=`ps aux | grep -v grep | grep "${DAEMON}.*${CONFIG_FILE}" -wc`
echo $processes_num
} function log() {
current_time=`date +"%Y-%m-%d %H:%M:%S"`
echo [$current_time] $CONFIG_FILE: $2>>$1
} processes_num=$(status)
case "$processes_num" in
0)
log $LOG_FILE "sersync service was died."
start
;;
1)
log $LOG_FILE "sersync service is running."
;;
*)
log $LOG_FILE "the system has launched $processes_num of the same sersync process."
stop
start
;;
esac

  

添加crontab任务执行:*/1 * * * * root /bin/bash /check_sersync2.sh /conf_tongbu.xml &

以下这个和check_sersync2.sh脚本类似,也是监控sersync服务的,相互对比一下:

#!/bin/bash
# usage:
# 1.将脚本命名为checksersync.sh
# 2 chmod +x checkrsync.sh 给脚本赋予可执行权限
# 2.添加到计划任务
# */1 * * * * /root/checksersync.sh logfile='/etc/sersync/checksersync.log'; function sersync_is_running(){
threadnum=`ps aux|grep sersync2|grep -v grep -wc`; #此处为监控sersync的监控手段,查找sersync2进程
if [ "$threadnum" -eq '0' ];then
echo '0';
else
echo '1';
fi
return;
} function current_time(){
if [ -z "$1" ];then
format="%Y-%m-%d %H:%M:%S%Z";
else
format=$1;
fi
echo `date +"$format"`;
return;
} function logtofile(){
echo $(current_time) $2>>$1;
} function sersync_restart(){
/etc/sersync/sersync2 -r -d -o /etc/sersync/confxml.xml >/dev/null 2>&1;
sleep 3; threadnum=$(sersync_is_running);
if [ $threadnum -eq '0' ]; then
echo "0";
else
echo '1';
fi
return;
} isrunning=$(sersync_is_running); mailzt=`cat $logfile|tail -1 > /etc/sersync/body.txt` if [ "$isrunning" -eq '0' ];then
logtofile $logfile "mail sersync service was died.";
mail -s "rsync sersync service was died." xxx@xxx.com < /etc/sersync/body.txt restart=$(sersync_restart); if [ $restart -eq '0' ];then
logtofile $logfile "sersync service restart failed.";
mail -s "rsync sersync service was died." xxx@xxx.com < /etc/sersync/body.txt
else
logtofile $logfile "sersync service restart success.";
mail -s "rsync sersync service restart success" xxx@xxx.com < /etc/sersync/body.txt
fi
else
logtofile $logfile "sersync service is running.";
fi exit 0;

  

win7使用cwRsync客户端上传文件的方式:

1.安装cwRsync。

2.编写bat脚本实现上传:

cwrsync.bat:

@echo off
set RSYNC_HOME=C:\Program Files (x86)\cwRsync\bin
cd %RSYNC_HOME%
rsync -avz --password-file='/cygdrive/c/Program Files (x86)/cwRsync/bin/pass.txt' --progress --port=10873 /cygdrive/e/myfiles/test.txt test@192.168.5.3::test

说明:pass.txt文件存放rsync的密码文件, /cygdrive/e是cwRsync用于指定盘符e盘的方式

执行cwrsync.bat脚本即可实现上传文件。

[记录]inotifywait+rsync脚本和sersync2服务检测的脚本的更多相关文章

  1. 服务检测sh脚本

    如mysql cat check_mysql.sh #!/bin/bash servicename="mysqld"showname="mysql" pid=& ...

  2. Rsync同步部署web服务端配置

    Rsync同步部署web服务端配置 1,参数详解: -v, --verbose 详细模式输出. -q, --quiet 精简输出模式. -c, --checksum 打开校验开关,强制对文件传输进行校 ...

  3. powershell脚本之windows服务与进程

    powershell脚本之windows服务与进程 服务与进程的区别: Windows服务是指系统自动完成的,不需要和用户交互的过程,可长时间运行的可执行应用程序 进程是程序运行的实例,系统会给运行中 ...

  4. Dubbo入门到精通学习笔记(二):Dubbo管理控制台、使用Maven构建Dubbo的jar包、在Linux上部署Dubbo privider服务(shell脚本)、部署consumer服务

    文章目录 Dubbo管理控制台 1.Dubbo管理控制台的主要作用: 2.管理控制台主要包含: 3.管理控制台版本: 安装 Dubbo 管理控制台 使用Maven构建Dubbo服务的可执行jar包 D ...

  5. 利用SHELL脚本实现文件完整性检测程序(1.2版更新)

    一..开发背景 因时势所逼,需要对服务器的文件系统实行监控.虽然linux下有不少入侵检测和防窜改系统,但都比较麻烦,用起来也不是很称手.自己琢磨着也不需要什么多复杂的功能,写个脚本应该就可以满足基本 ...

  6. 编写脚本实现DHCP服务与DHCP中继自动化执行

    编写脚本实现DHCP服务与DHCP中继自动化执行 本脚本是在liunx搭建DHCP服务器以及DHCP中继服务器实验环境下实现的https://www.cnblogs.com/yuzly/p/10539 ...

  7. SqlServer 使用脚本创建分发服务及事务复制的可更新订阅

    原文:SqlServer 使用脚本创建分发服务及事务复制的可更新订阅 [创建使用本地分发服务器] /************************[使用本地分发服务器配置发布]*********** ...

  8. 【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题

    记录通过执行Oracle的执行计划查询SQL脚本中的效率问题   问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件.   首先,Quartz表达式培植的启 ...

  9. python脚本实现集群检测和管理

    python脚本实现集群检测和管理 场景是这样的:一个生产机房,会有很多的测试机器和生产机器(也就是30台左右吧),由于管理较为混乱导致了哪台机器有人用.哪台机器没人用都不清楚,从而产生了一个想法-- ...

随机推荐

  1. ps 专题

    ps p 22763  -L -o pcpu,pid,tid,time,tname,cmd,pmem,rss --sort rss  按rss排序 ps p 26653 -L -o pcpu,tid ...

  2. SimpleMembership,成员资格提供程序、 通用的提供者和新的 ASP.NET 4.5 Web 窗体和 ASP.NET MVC 4 模板

    ASP.NET MVC 4 互联网模板中添加一些新的. 非常有用的功能,构建 SimpleMembership.这些更改将添加一些很有特色,像很多更简单. 可扩展会员 API 和 OAuth 的支持. ...

  3. Windows下获取逻辑cpu数量和cpu核数量

    代码可在Windows NT下正常运行 具体API说明请参照如下文档: GetLogicalProcessorInformation 点击打开链接 点击打开链接 点击打开链接 typedef BOOL ...

  4. c#基于Tablet pc实现的手写输入

    需要安装Tablet pc,win7的话 直接在控制面板>程序和应用>添加组建里面勾选上添加 然后就是下面的程序了,看代码 设计文件 namespace 手写识别 { partial cl ...

  5. python合并多个文件

    import os filelist=os.listdir('/root/Music') for item in filelist: print item newfile=open('/root/Mu ...

  6. python 方法无法在线程中使用(附python获取网络流量)

    在python中,定义一个方法,直接调用可以,但是创建一个线程来调用就可能导致失败.这种现象多出现在使用com对象进行系统操作时,而且是以线程的形式调用. 异常提示如下:syntax error.WM ...

  7. 627.Swap Salary-(LeetCode之Database篇)

    问题描述 给出下面的表,名为salary. id name sex salary 1 A m 2500 2 B f 1500 3 C m 5500 4 D f 500 要求执行一个UPDATE语句,将 ...

  8. React性能优化之PureComponent 和 memo使用分析

    前言 关于react性能优化,在react 16这个版本,官方推出fiber,在框架层面优化了react性能上面的问题.由于这个太过于庞大,我们今天围绕子自组件更新策略,从两个及其微小的方面来谈rea ...

  9. ABP开发框架前后端开发系列---(12)配置模块的管理

    一般来说,一个系统或多或少都会涉及到一些系统参数或者用户信息的配置,而ABP框架也提供了一套配置信息的管理模块,ABP框架的配置信息,必须提前定义好配置的各项内容,然后才能在系统中初始化或者通过接口查 ...

  10. Spring Boot2(四):使用Spring Boot多数据源实现读写分离

    前言 实际业务场景中,不可能只有一个库,所以就有了分库分表,多数据源的出现.实现了读写分离,主库负责增改删,从库负责查询.这篇文章将实现Spring Boot如何实现多数据源,动态数据源切换,读写分离 ...