rsync+inotify实现实时同步 通过上面的步骤可以实现rsync+inotify 实时同步,那么我想要将写好的脚本制作成service,并且开机自启动。
编写属于自己的Linux Service命令
Linux平台下的service程序编写指南:start \stop 1.cd /etc/init.d/
2.新建一个sh文件:vi inotify
#!/bin/sh #chkconfig: 2345 80 90 #description:auto_run #后面想要加载成服务是必须要写上面的两个 ouy=/home/wwwroot/inotify_ou.sh #-e 代表文件存在 if [ ! -e "${ouy}" ] ; #判断文件是否存在 then echo "Check File and Folder" exit 9 fi if [ $(ps -ef |grep -c /inotify ) -gt 0 ]; #删除之前存在的sh。 then echo "have process" kill -9 $(ps -ef|grep /inotify_ |gawk '{print $2}' |tr -s '\n' ' ') kill -9 $(ps -ef|grep /inotifywait |gawk '{print $2}' |tr -s '\n' ' ') echo "cleaned process." fi sh $ouyeel & #执行,&代表在后台执行Linux Shell 编程——基本语法 eg: {} 代码规范要带花括号。 -e 代表是否存在 if 语句中的空格不能漏掉,否则出错 在shell编程中,直接写命令即可。
服务不支持 chkconfig ———没添加代码开头前两行
根据进程名杀死进程 -kill进程名 我想要先检查是否已经进行了监听,如果监听删除原来的监听事件。 通过判断进程中是否有inotify关键字的进程的行数判断。
linux ps命令的用法 ps是查看进程的命令。 -e 代表所有进程 -f 代表程序之间的关系
linux grep命令 grep 使用正则表达式搜素文件 -c 行数 最后跟查找的文件名的正则表达式即: grep -c expression
gawk 命令 gawk 用来处理文本文件中数据。 它通过自动将变量分配给每行中的每个数据元素实现这一功能。 ◆ 0表示整行文本◆ 1表示文本行中的第一个数据字段 ◆ 2表示文本行中的第二个数据字段◆ n表示文本行中的第n个数据字段
linux tr命令详解 主要是做字符串的处理,去重,替换等 -s 删除所有重复出现字符序列,只保留第一个
格式:
tr -c -d -s ["string1_to_translate_from"] ["string2_to_translate_to"] < input-fileLinux & 后台运行 & :放到后台运行。
3.chkconfig是用于把服务加到开机自动启动列表里,只要启动它,就能自动启动,重启后永久生效
4.chkconfig –add inotify
5.chkconfig inotify on/off 重启后永久生效
到此,服务就添加成功。
另外:配置一下inotifywait监听的SH文件:
rsync+inotify实现实时同步修改的地方是:
${inotify_home}/bin/inotifywait -mrq --exclude '^/home/wwwroot/default/ouyeel/tmp' --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e close_write,delete,create,attrib $src \ 因为在同步时,tmp是缓存文件夹,所以不需要同步,故使用inotify自带的的exclude参数。
inotify-tools的inotifywait工具用exclude 和 fromfile 排除指定后缀文件