文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>简单静态文件实时同步

简单静态文件实时同步

时间:2010-07-01  来源:skybin090804

需求: 今天一个同事提出需求,想进行动静分离,但静态html文件是他程序自动生成,他不想
写两台机器,要做让另一台机自动实时监测另一台机有没有更新,有的就进行同步。

最初想法是利用公司现有的同步系统,帮他完成算了;(原有的同步系统是公司以前的同事们使
用inotify+rsync进行的开发,功能比较强大,配置比较繁琐,但没有留下文档),然后就想
那么简单的功能,弄个这样的东西上去,以后会加重自己的负担,于是就自己简单写一下。

先有两台机:238.91 238.90
应用程序会在238.91上的/data/gamehall_sync/www,生成xxx.html之类的文件,供nginx
使用;在生成html之类的文件同时,会在/data/gamehall_sync/mission目录下生成控制
文件(所谓控制文件只是一些文件列表,例如:
index.php
test/test.jsp

在另一台机器238.90上的/data/gamehall_sync/web保存同步回来的静态文件,供nginx
使用,/data/gamehall_sync/conf/machine.list放置提供文件的机器ip;/data/gamehall_sync/expired保存已操作过的控制文件

238.91上rsync的配置
uid = 0
gid = 0
use chroot = no
max connections = 100
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
list = false

[gamehall_web]
path = /data/gamehall_sync/www
hosts allow = 192.168.238.90,192.168.238.91


[gamehall_mission]
path = /data/gamehall_sync/mission
hosts allow = 192.168.238.90,192.168.238.91
read only = no
write only = no

操作代码如下(只需在238.90上部署)

#!/bin/bash
#author Sky
PATH="/var/PROGRAM/MANAGEMENT/modules/xbash:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:"
LANG=zh_CN
export PATH LANG

ROOTPATH="/data/gamehall_sync" #同步根目录
MISSION_DEST="gamehall_mission" #远程rsync标识
WEB_DEST="gamehall_web"   #远程rsync web标识
CONF="/data/gamehall_sync/conf/machine.list" #远程提供同步的机器
MISSION_DIR="$ROOTPATH/mission" #任务文件放置的目录
WEB_DIR="$ROOTPATH/web"  #文件放置的目录
file_dest=""
LOGPATH="$ROOTPATH/log/run.log"

now_year=$(date +%Y)
now_month=$(date +%m)
now_day=$(date +%d)
now_time_hour=$(date +%H)
now_time_min=$(date +%M)
logname=$now_year$now_month$now_day


start=`ps auwxxx | grep "realtime_sync.sh" | grep -v "grep" | wc -l `
[[ $start -gt 2 ]] && echo "有同步任务在进行,先退出" >> $ROOTPATH/log/status.log && exit 0


cat $CONF | \
while read machine
do
   rsync -a rsync@$machine::$MISSION_DEST $MISSION_DIR
   dir_num=`ls $MISSION_DIR | wc -l`
   if [[ $dir_num -gt 0 ]] ; then
       mis_name=`ls $MISSION_DIR`
       if [[ -e $MISSION_DIR/$mis_name ]] ; then
         if cat $MISSION_DIR/$mis_name | grep -q "none"
          then
            echo $logname "  "$now_time_hour$now_time_min "  没文件同步" >> $LOGPATH
         else
          cat $MISSION_DIR/$mis_name | \
           while read file_name
             do
               file_dest=`dirname $file_name`
               if echo $file_dest | grep -q "\."
                then
                rsync -a rsync@$machine::$WEB_DEST/$file_name $WEB_DIR
               else
                if [[ ! -e $WEB_DIR/$file_dest ]] ; then
                  mkdir -p $WEB_DIR/$file_dest
                fi 
                rsync -a rsync@$machine::$WEB_DEST/$file_name $WEB_DIR/$file_dest  
               fi
             done
          #####################
          ##控制文件整理#######
          #####################
           if [[ ! -e $ROOTPATH/expired/$now_year$now_month ]]
             then
              mkdir -p $ROOTPATH/expired/$now_year$now_month
           fi
           if [[ ! -e $ROOTPATH/expired/$now_year$now_month/$now_day ]]
             then
               mkdir -p $ROOTPATH/expired/$now_year$now_month/$now_day
           fi
           cp -f $MISSION_DIR/$mis_name $ROOTPATH/expired/$now_year$now_month/$now_day
          #################
          echo "none" > $MISSION_DIR/$mis_name
          rsync -a $MISSION_DIR/$mis_name rsync@$machine::$MISSION_DEST
          echo $logname "  "$now_time_hour$now_time_min "  文件同步" >> $LOGPATH
         fi
       fi
   fi
done


############日志滚动##############
pasttime=`tail -1 $LOGPATH | awk '{print $1}'`
inter=$(($logname-$pasttime))
if [[ $inter -gt 5 ]] ; then
    [[ -e $LOGPATH.2 ]] && cp -f $LOGPATH.2 $LOGPATH.3
    [[ -e $LOGPATH.1 ]] && cp -f $LOGPATH.1 $LOGPATH.2
    cp -f $LOGPATH $LOGPATH.1
fi
##################################

文件: gamehall_sync.tar.gz
大小: 1KB
下载: 下载

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载