我们公司图片服务器2台,一个主一个从 nginx 散列到两台

图片上传服务就传到一台,需要同步过去

现在方案是 定期rsync,图片md5散列 ,rsync 递归那么深的目录占用系统资源较大

现在 增加一个log功能,每增加一个图片写一个log文件

/tmp/i_2011-09-01.log

add xxxxxxxx.jpg
add xxxxxxxx.jpg

...

python 定期扫描该文件是否有新记录

然后改名 使用

rsync --files-from=  就不需要递归扫描目录 测试文件修改时间了

 

  1. #coding:utf-8 
  2. ''''' 
  3. @todo 可以将图片同步 接近实时 
  4.  
  5. 快速同步,图片脚本 
  6. rsync --files-from=t.txt . ../b 
  7. 后台持续运行 
  8. python rsync_img2.py --from-path=/imgpath/img --host=imgxxxxx --log-files=/tmp/tmp/img_2011-07-05.log 
  9.  
  10. ''' 
  11. import os.path 
  12. import os  
  13. import tempfile 
  14. import datetime 
  15. import time 
  16.  
  17. def run(path,log_file,host): 
  18.     '同步 目录  到对方服务器' 
  19.  
  20.      
  21.     #自动追加的 每次改名 
  22.     s=log_file 
  23.     if os.path.isfile(log_file): 
  24.         print 'pass no  log' 
  25.         time.sleep(2
  26.         return 
  27.     tmp=tempfile.mktemp('tmplog', os.path.basename(s), '/tmp'
  28.     tmp2=tempfile.mktemp('tmplog', os.path.basename(s), '/tmp'
  29.     os.rename(log_file, tmp)         
  30.     fp=open(tmp,'r'
  31.     fp2=open(tmp2,'w'
  32.     for line in fp: 
  33.         t=line.strip().split(' '
  34.         if len(t)>1
  35.             fp2.write(t[1]+"\n"
  36.     fp2.close() 
  37.     fp.close() 
  38.     os.unlink(tmp) 
  39.     os.unlink(tmp2)    
  40.      
  41.     cmd='sudo  -u mc -H rsync  -r -avuz  -e "ssh" --files-from='+tmp2+' '+path +' web@'+host+':'+path 
  42.     print cmd 
  43.     os.system(cmd) 
  44.  
  45.  
  46. if __name__=='__main__'    : 
  47.      
  48.     while 1
  49.         try
  50.             run('/imgpath/img/','/tmp/img_'+datetime.datetime.now().strftime('%Y-%m-%d')+'.log','imgserver12331'
  51.         except
  52.             pass 
  53.         time.sleep(1
  54.