免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3732 | 回复: 0
打印 上一主题 下一主题

批量更新小文件(版本控制) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-01-22 10:38 |只看该作者 |倒序浏览
    环境需求: 本人工作环境中存在上千多台服务器,自己负责几十台每台上又分一些应用,所存在很多管理脚本、监控脚本、控制脚本等,如果自己需要升级就比较麻烦了,要发一个公告谁用了我这个脚本,要在哪里哪里拿然后怎么怎么更新(相对于项目应用、打文件是有一套更新系统的),所以为了方便自己的管理,做了一个小的版本控制程序,有:文件分发功能、文件升级功能。
   可能会问,现在有很多同步的工具啊简单的例如rsync等。就拿这个rsync来说,又要做服务端配置,又要做客户端配置。这有麻烦了,我现在做的是只在服务端进行信息的录入,服务端不用进行任何配置。
   
   简单流程是:
   
     将要更新的文件拷到服务端相应的目录->更改好文件的相应权限(因为到客户端也要保证同样的权限)->录入相关信息(要分发和同步的客户端ip,要把文件放置客户端的那个目录,定义的文件名字)
      
     核心代码:
      
#!/usr/bin/python
#Edited by Sky bin /Ashely 2010.01.22
import pexpect
import string
import os
import time
import sys
T=time.time()
timeout=30
username="sky"
passwd=""
ip=""
filename=""
filepath=""
def handle(username,passwd,ip):
   shell_cmd='ssh
[email='+username+'@'+ip]'+username+'@'+ip[/email]
   child = pexpect.spawn(shell_cmd,timeout=timeout)
   idx=child.expect(['password:','continue connecting(yes/no)?'])
   if idx==0:
     child.sendline('&10acypt')
     child.expect('$')
     child.sendline('su -')
     child.expect("Password:")
     child.sendline(passwd)
     child.expect('#')
     child.sendline('cd '+filepath)
     child.expect('#')
     child.sendline('mv -f /home/support/'+filename+' '+filepath)
     child.expect('#')
   elif idx==1:
     child.sendline('yes')
     child.close()
     handle(username,passwd,ip)
   child.close()
def handle_scp(ip,filename,usernaem):
   scp_cmd="scp src_file/"+filename+"
[email="+username+"@"+ip]"+username+"@"+ip[/email]
+":."
   child = pexpect.spawn(scp_cmd)
   child.expect('.ssword:*')
   child.sendline('sky')#发送密码
   #child.interact()
   child.expect(pexpect.EOF)
   child.close()
def get_passwd(passwd,tap):
   这个是本人的root的密码转换规则这里就不贴出来了
try:
  if len(sys.argv)
except pexpect.EOF:
  print 'error'
  print '%d seconds'% int(time.time()-T)
  

shell调用该python的脚本代码:

    #!/bin/bash
#Edited by Sky bin /Ashely 2010.01.22
LIST="list"
time_inter=5
des=""
i=0
  find src_file/ -ctime -$time_inter | awk 'BEGIN { FS="/"} {if ($2!="") print $2}' | \
  while read filename
  do
    i=$(($i+1))
    if [ $i -lt 2 ] ; then
       des="$filename"
       echo $des > /tmp/.filename
    else
       des="$des|$filename"
       echo $des > /tmp/.filename
    fi
  done
if [[ -e /tmp/.filename ]] ; then
   des=`cat /tmp/.filename`
   rm -f /tmp/.filename
   grep -E $des list | awk '{print  $1,$2,$3}'| \
   while read filepath filename ip
     do
        passwd=`echo $ip | awk 'BEGIN { FS="."} {print $4}'`
        IP_tap=`echo $ip | awk 'BEGIN { FS="."} {print $3}'`
        /usr/bin/python ssh.py $ip $filename $filepath $passwd $IP_tap
     done
fi


信息录入代码:
   
   #!/bin/bash
#Edited by Sky bin /Ashely 2010.01.22
. add_file.sh
. scan.sh
. del_file.sh
export LANG=zh_CN.gb18030
ROOT="`update.sh"
MENU="`menu_dir/menu"
MENU2="menu_dir/menu2"
#echo $ROOT
        export PS3="[Update Tool Server Mode]:"
        select item in `awk -F: '{print $1}' $MENU`
        do
               if [ $item == "EXIT" ] ; then
                  break
               elif [ $item == "FILE_INFORMATION" ] ; then
                     select itemt in `awk -F: '{print $1}' $MENU2`
                     do
                       if [ $itemt == "EXIT" ] ; then
                          exit
                       elif [ $itemt == "BACK" ] ; then
                          break
                       elif [ $itemt == "ADD_FILE_INFO" ] ; then
                          add_file
                       elif [ $itemt == "SCAN" ] ; then
                          scan
                       elif [ $itemt == "DEL_FILE_INFO" ] ; then
                          del_file
                       fi
                      done
               fi
        done
                     
function add_file(){
  echo "Please input your Client File_Path_Server filename and IP"
  read  serverfilename filename ip
  servertap=`expr length "$serverfilename"`
  filetap=`expr length "$filename"`
  iptap=`expr length "$ip"`
  if [[ $servertap -gt 1 && $filetap -gt 1 && $iptap -gt 1 ]] ; then
    tap="$(echo $ip | grep -c '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')"
     if [ "$tap" = "0" ] ; then
        echo "你的输入是非法的IP格式"
     else
        tap=`grep "$serverfilename $filename $ip" list`
        tapnum=`expr length "$tap"`
         if [[ $tapnum -lt 1 ]] ; then
          if echo "$serverfilename $filename $ip">> list 2> /dev/null ;then
             echo "Your file infomation has been added!"
          else
             echo "Input wrong!"
          fi
         else
          echo "The information already exist"
         fi
      fi
   else
      echo "You miss something infomation!"
  fi
}
      

function del_file()
{
  select itemth in `cat $LIST | sed "s/ /---/g"`
   do
      del_str=`echo $itemth | sed "s/---/ /g"`
      sed -i "/$del_str/d" $LIST
      echo "Deleted the information in list!"
      break
   done
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/102731/showart_2157231.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP