inotify+rsync实现实时同步(附解决crontab中无法执行python脚本的问题)
1.准备环境
# 系统支持的话,下面的目录就会存在
ls /proc/sys/fs/inotify/
rpm -qa inotify-tools
yum -y install inotify-tools
2.inotifywait监控目录状态变化
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e delete,create,close_write /data
# 可以把时间去掉
/usr/bin/inotifywait -mrq --format '%w%f' -e delete,close_write /data
3.循序渐进的同步脚本
#!/bin/bash
Path=/data
Ip=172.16.1.41
/usr/bin/inotifywait -mrq --format '%w%f' -e delete,close_write $Path | while read file
do
cd $Path &&\
rsync -az ./ --delete rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password
done
# 上边那个脚本效率很低,效率低的原因在于只要目录出现变化就都会导致我整个目录下所有东西都被推送一遍.
# 因此,我们可以做如下改动提高效率.
#!/bin/bash
Path=/data
backup_Server=172.16.1.41
/usr/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete /data | while read line
do
if [ -f $line ];then
rsync -az $line --delete rsync_backup@$backup_Server::nfsbackup --password-file=/etc/rsync.password
else
cd $Path &&\
rsync -az ./ --delete rsync_backup@$backup_Server::nfsbackup --password-file=/etc/rsync.password
fi
done
# 脚本可以加入开机启动
echo "/bin/sh /server/scripts/inotify.sh &" >> /etc/rc.local
4.参数优化
cat /proc/sys/fs/inotify/*
max_queued_events max_user_instances max_user_watches
echo "50000000" > /proc/sys/fs/inotify/max_user_watches
echo "326790" > /proc/sys/fs/inotify/max_queued_events
5.inotify优缺点
监控文件系统事件变化,通过同步工具实现实时数据同步;
并发如果大于200个文件(10-100k),同步就会有延迟.
6.通过start/stop控制inotify.sh脚本的启动和停止
#!/bin/bash
#chkconfig: 2345 38 46
. /etc/init.d/functions if [ $# -ne 1 ];then
usage: $0 |start|stop|
exit 1
fi case "$1" in
start)
/bin/sh /server/scripts/inotify.sh &
echo $$ > /var/run/inotify.pid
if [ `ps -ef | grep inotify | grep -v grep | wc -l` -gt 2 ];then
action "inotify service is started" /bin/true
else
action "inotify service is started" /bin/false
fi
;;
stop)
kill -9 `cat /var/run/inotify.pid` > /dev/null 2>&1
pkill inotifywait
sleep 1
if [ `ps -ef | grep inotify | grep -v grep | wc -l` -eq 0 ];then
action "inotify service is stopped" /bin/true
else
action "inotify service is stopped" /bin/false
fi
;;
*)
usage: $0 |start|stop|
exit 1
esac
chkconfig --add syncd
7.解决crontab中无法执行python脚本的问题
a.首先你得知道是环境变量问题还是你的脚本执行有报错,
像一些编码报错、没写全路径、缺少环境变量的问题,就不在这里赘述了;
b.将问题先定位到日志中
*/1 * * * * python绝对路径 脚本绝对路径 >> 日志文件绝对路径 2>&1
查看日志发现脚本被定时执行了,但日志有报错:
TERM environment variable not set.
IndexError: list index out of range
经过排查,是因为脚本中执行了os.popen('top -n 1 | awk xxx')这样的语句,
导致取数据的列表为空,对空列表取值就会报上面的错,替换相应的程序即可解决问题.
参考博客:https://www.cnblogs.com/jackyyou/p/5681126.html
参考博客:https://www.cnblogs.com/chensiqiqi/p/6542268.html
inotify+rsync实现实时同步(附解决crontab中无法执行python脚本的问题)的更多相关文章
- 【转】inotify+rsync实现实时同步
[转]inotify+rsync实现实时同步 1.1 什么是实时同步:如何实现实时同步 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 发现目录中数据产生变化,就利用rsync服 ...
- Rsync+inotify实现文件实时同步#附shell脚本
强烈推荐先仔细看此文 https://segmentfault.com/a/1190000002427568 实验环境 centos 7.3 vm2:192.168.221.128 同步服务器 vm1 ...
- inotify+rsync实现实时同步
第1章 数据实时同步介绍 1.1 什么是实时同步:如何实现实时同步 A. 要利用监控服务(inotify),监控同步数据服务器目录中信息的变化 B. 发现目录中数据产生变化,就利用rsync服务推送到 ...
- lsyncd替代inotify+rsync实现实时同步
因公司业务需要需要实时同步日志文件,刚一开始使用的是inotify+rsync来实现实时同步,但时间久而久之发现同步的速度越来越慢,往往延迟好几个小时.查了一下网上的inotify+rsync方案基本 ...
- inotify+rsync文件实时同步
原文转自http://dl528888.blog.51cto.com/2382721/771533/ 之前做了“ssh信任与scp自动传输脚本”的技术文档,此方案是作为公司里备份的方法,但在实际的运行 ...
- inotify+rsync实现实时同步部署
1.1.架构规划 1.1.1架构规划准备 服务器系统 角色 IP Centos6.7 x86_64 NFS服务器端(NFS-server-inotify-tools) 192.168.1.14 Cen ...
- inotify +rsync进行实时同步
1.安装rpm -ivh http://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpmyum -y install ino ...
- inotify+rsync实现实时同步并邮件通知
服务器之间文件实时同步,监控文件的变化,发送邮件通知,并实时同步文件. 由于人工同步多台服务器的文件比较吃力,可以借助这样一套软件,自动化的实现这样的工作. 并且可以事实监控变化发送邮件给系统管理人员 ...
- inotify+rsync目录实时同步
两台linux服务器系统CentOS7 一台Apache IP:192.168.155.130(发布文件服务器,也可以叫rsync客户端) 一台nginx IP:192.168.155.131(同步镜 ...
随机推荐
- GoF23种设计模式之行为型模式之状态模式
一.概述 定义对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 二.适用性 1.一个对象的行为取决于它的状态,并且它必须在运行时刻 ...
- JAVA、JDK等入门概念,下载安装JAVA并配置环境变量
一.概念 Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言,具体介绍可查阅百度JAVA百科,这里不再赘述. Java分为三个体系,分别为: Java SE(J2SE,Java2 Platf ...
- install redis and used in golang on ubuntu 14.04
$ wget http://download.redis.io/releases/redis-3.0.3.tar.gz$ tar xzf redis-3.0.3.tar.gz$ cd redis-3. ...
- 如何从Maven中央存储库下载?
根据 Apache Maven说明: 下载时由项目的 pom.xml 文件的依赖来决定,目前不在本地存储库触发(当中央存储库包含了一个更新).默认情况下,Maven将从中央存储库下载. 在Maven中 ...
- 使用代码生成器“代码工厂”快速生成B/S程序代码
开发目的: 自动生成C#.HTML.JS.Ajax 代码 .可以节省大量的时间来做业务逻辑的代码,那些重复的代码就不需要....了 环境支持: 硬件环境:window .VS2010+.支持SQLSe ...
- DB2 和 有道词典冲突: A communication error has been detected. Communication protocol being used: Reply.fill().
我在本机安装了DB2 9.5. 使用java jdbc连接,一直没有问题. QC for db2 连接 也一直没有问题. 突然有一天 Java程序连接 报错: A communication erro ...
- [git 学习篇]自己在github创建一个远程服务器创库
现在的情景是,你已经在本地创建了一个Git仓库后,又想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,这样,GitHub上的仓库既可以作为备份,又可以让其他人通过该仓库来协作,真是一举 ...
- Codeforces Round #410 (Div. 2) A. Mike and palindrome
A. Mike and palindrome time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- Synergy 使用方法备忘
Synergy 是 Symless 公司推出的「鼠标键盘共享软件」(mouse and keyboard sharing software),其功能还包括「共享剪贴板」(sharing clipboa ...
- NOJ——1508火烧赤壁2(并查集+启发式合并+逆序加边)
[1508] 火烧赤壁2 时间限制: 1000 ms 内存限制: 65535 K 问题描述 上次出了一道火烧赤壁的题目给当时的新生,也就是你们的上一届学长们做,那么这次,我又想到了另一个想法. 上次的 ...