首页 > linux > 网站更新脚本

网站更新脚本

2011年1月7日 eric 发表评论 阅读评论

shell版本:

nginxs $> cat  upload.sh

#!/bin/bash
usage() {
    echo "basename $0" [-g] [-p] args
    echo "-h"
    echo "print script help"
    echo "-g:"
    echo "   is a gzip filename"
    echo "-p:"
    echo "   File absolute path"
    echo "   must \" \""
    echo "   \"/var/www /var/data\""
    exit 0
}

while getopts "hg:p:" opt; do
   case $opt in
      h)
         usage
         ;;
      g)
         Filename=$OPTARG
      #打包的文件名!
         ;;
      p)
         path=$OPTARG
     #要上传的目录和文件,要输入绝对地址例如 /var/www/123.jpg,/var/www/eric/
         ;;
      : )
         echo "The opt is unknown"
         ;;
      ?)
         echo "ERROR"
         ;;
    esac
done
[ -z $1 ] && usage
tar -Pzcvf $Filename $path 

#打包文件,-P的含义是,保持源文件的绝对地址。
/home/ssh.sh $Filename
#打包完文件执行 home下的ssh.sh脚本,把变量 $Filename 传入ssh脚本。

nginxs $> cat /home/ssh.sh
#!/usr/bin/expect -f
set file [lindex $argv 0]       #设置变量为 传入的的参数
spawn scp -P22 $file root@192.168.6.161:~/
#上传文件到服务器
expect {
"yes/no)" {send "yes\r";exp_continue}
#判断是否第一次SSH连接服务器
"*password:" {send "123456\r"}
#输入密码
}
sleep 2
expect eof
#结束连接
spawn ssh -p22 -l root 192.168.6.161
#SSH连接到服务器
expect {
"yes/no)" { send "yes\r";exp_continue }
#判断是否第一次登录服务器
"*password:" { send "123456\r" }
# 输入密码
}
sleep 2
expect "*#"
send "tar -Pzxvf $file\r"
#解压文件
sleep 2
expect "*#"
send "chown www.root /var/www/\r"
#赋予解压目录的权限
expect "*#"
send "exit\r" 

PYTHON 版本:

nginxs $> cat pyrsync

#!/usr/bin/python
import pexpect
import sys
import getopt
import time
import os
import re
import tarfile

def usage():
    print """pyrsync is a upload webdata script
    Usage:

    pyrsync [-h|--help][-H|--Host][-P|--Port][-u|--user][-p|--password][-f|--file]

    Optiions:
            --help|-h)
                  print pyrsync help
            --Host|-H)
                  sets the server SSH host.
            --Port|-P)
                  sets the Server SSH port.
            --user|-u)
                  sets the Server SSH user.
            --passwrod|-p)
                  sets the Server SSH password.
            --file|-f)
                  sets the upload files or directory.
                  must , 分割  例如  1,2,3,4
     example:
         ./pyrsync -H192.168.6.100 -P22 -ueric -p123456 -f 123,456,abc,def"""
    sys.exit(3)

try:
  options,args = getopt.getopt(sys.argv[1:],"hH:P:u:p:f:",["help","Host=","Port=","user=","password=","file"])
except getopt.GetoptError:
   usage()
for name,value in options:
    if name in ("-h","--help"):
       sys.exit(1)
    if name in ("-H","--Host"):
       HOST = value
    if name in ("-P","--Port"):
       PORT = value
    if name in ("-u","--user"):
       user = value
    if name in ("-p","--password"):
       password = value
    if name in ("-f","--file"):
       filelist = value
       filelist = filelist.split(",")
try:
  gzipfile = 'yangzi.tar.bz2'
#文件打包成的文件名
  tar = tarfile.open(gzipfile,"w:bz2")
#以 bz2的格式压缩
  for name in filelist:
      tar.add(name)
  tar.close()
except:
  usage()

scp = pexpect.spawn('scp -P%s %s %s@%s:~/' % (PORT,gzipfile,user,HOST))
#scp上传文件到指端口的服务器!
i = scp.expect(['.*yes\/no\)\?','.*ssword:'])
#判断是否第一次SSH连接服务器
if i == 0:
   scp.sendline('yes')
   i = scp.expect(['.*yes\/no\)\?','.*ssword:'])
elif i == 1:
   scp.sendline('%s' % password)
   scp.expect(pexpect.EOF)

ssh = pexpect.spawn('ssh -p%s -l%s %s' % (PORT,user,HOST))
#SSH连接服务器!
i = ssh.expect(['.*yes\/no\)\?','.*ssword:'])
#判断是否第一次连接服务器!
time.sleep(1)
if i == 0:
   ssh.sendline('yes')
   i = ssh.expect(['.*yes\/no\)\?','.*ssword:'])
elif i == 1:
   ssh.sendline('%s' % password)
ssh.expect('.*#')
ssh.sendline('tar jxvf %s\r' % gzipfile)
#解压上传压缩包
ssh.sendline('mv %s /opt/\r' % filelist[0])
# 移动 -f 顺序的第一个文件到 /opt/
ssh.sendline('mv %s /var/\r' % filelist[1])
# 移动 -f 顺序的第二个文件到 /var/下
#ssh.sendline('mv %s /var/www\r' % filelist[2])
#如果文件多,请按照数序往下加,文件数据是你-f 后跟的顺序!
ssh.sendline('exit\r')
# 退出ssh登录
ssh.expect(pexpect.EOF)

转载请注明:文章转载自:Eric's linux and nginx! (http://www.nginxs.com)
本文地址:http://www.nginxs.com/linux/409.html

分类: linux 标签: ,
订阅评论
4+5= (必填)