• 批处理程序:自动上传FTP,再登陆linux服务器执行更新


    ----转载请注明出处:博客园-邦邦酱好

    最近在学批处理程序,一直没找到能够结合工作来使用它的地方,前几天测试服务端的时候突然想到可以这样做:

    写一个批处理程序,自动通过FTP上传软件包到指定的地方,然后自动登录Linux服务器,解压缩软件包,进行服务端的更新。

    先看一下总的调度脚本Auto_Update.bat

    先让用户输入服务器的地址,再选择要执行的操作。

    @echo off&setlocal enabledelayedexpansion 
    ::::::::::::::::::::::::::::::::::::::::::::::
    ::::::::::::::::::相关配置::::::::::::::::::::
    ::::::::::::::::::::::::::::::::::::::::::::::
    ::服务器地址
    ::set url=192.168.0.12
    
    ::本地最新程序包的地址
    set SourceAddress=D:testFTP
    
    ::FTP上存放程序包的地址
    set TargetAddress=/upload
    
    ::FTP到服务器的用户名和密码
    set FtpName=abcFTP
    set FtpPassword=123
    
    ::telnet上服务器时的用户名和密码
    set userid=abcLinux
    set password=123456 ::解压缩文件所在的目录 set untarDir=/tmp/upload ::4次拷贝 set copy1=cp /tmp/upload/dst/a.dat /app/ -f set copy2=cp /tmp/upload/lis/b.dat /lis/ -f set copy3=cp /tmp/upload/cs /Lis/ -rf set copy4=cp /tmp/upload/test_ci /app/ -f ::运行程序所需要用到的目录名和命令 set do1_dir=/Lis/set do1=./m.sh set do2_dir=/app/set do2=./test_ci echo 请输入你要执行操作的服务器地址: set /p url= :repeat echo. echo. echo ############请选择要执行的操作########### echo ----1.输入数字1并按回车键,则进行自动上传程序包到FTP服务器的操作 echo ----2.输入数字2并按回车键,则直接执行更新操作(用户已手动上传程序包) echo ----3.输入数字3并按回车键,则自动上传程序包并更新程序 echo ----4.输入exit并按回车键,则终止脚本 echo 请输入: set /p choice= :::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::程序包上传FTP:::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::: if "%choice%"=="1" ( echo 请确认你已经把程序包放到本地指定目录下(y/n): set /p yn= if /i "!yn!"=="n" ( set yn= goto end ) echo 开始上传本地最新的程序包到服务器上... call Upload_Ftp.bat echo 上传完毕 goto repeat ) :::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::执行更新操作::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::: if "%choice%"=="2" ( echo 本次操作将进行初始化操作,请确认已经重启过服务器(y/n): set /p yn= if /i "!yn!"=="n" ( set yn= goto end ) echo 开始登陆服务器进行更新操作... call Run_The_Program.bat goto repeat ) :::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::上传并更新::::::::::::::::::::: :::::::::::::::::::::::::::::::::::::::::::::: if "%choice%"=="3" ( echo 本次操作将上传并更新程序,请确认程序包已在本地指定目录下,并已重启过服务器(y/n): set /p yn= if /i "!yn!"=="n" ( set yn= goto end ) echo 开始上传本地最新的程序包到服务器上... call Upload_Ftp.bat echo 上传完毕 echo. echo 开始登陆服务器进行更新操作... call Run_The_Program.bat goto repeat ) echo. echo. if "%choice%"=="exit" ( echo 你输入了%choice%字符,批处理自动退出 goto end ) echo 无法识别指令,请重新输入 goto repeat :end set choice= echo 脚本终止!

    接着是上传FTP的脚本Upload_Ftp.bat

    不能单独运行此脚本,因为它所需的变量都在总调度脚本中。

    @echo off
    
    ::::::::::::::::::::::::::::::::::::::::::::::
    ::::::::::::::::::上传过程::::::::::::::::::::
    ::::::::::::::::::::::::::::::::::::::::::::::
    rem 登陆FTP
    echo open %url% > AutoFtp.ftp
    rem 输入用户名和密码进行登陆
    echo user %FtpName% %FtpPassword%>> AutoFtp.ftp
    echo binary >> AutoFtp.ftp
    rem 切换到FTP的某个目录下
    echo cd %TargetAddress% >> AutoFtp.ftp
    rem 切换到本地的某个目录下
    echo lcd %SourceAddress% >> AutoFtp.ftp
    rem 设定为:无需用户对每个文件进行确认
    echo Prompt off >> AutoFtp.ftp
    rem 开始上传
    echo mput * >> AutoFtp.ftp
    echo bye >> AutoFtp.ftp
    echo quit >> AutoFtp.ftp
    
    ::::::::::::::::::::::::::::::::::::::::::::::
    ::::::::::::::::::执行上传::::::::::::::::::::
    ::::::::::::::::::::::::::::::::::::::::::::::
    ftp -n -s:AutoFtp.ftp
    del AutoFtp.ftp

    最后是服务端的更新脚本Run_the_Program.bat:

    不能单独运行此脚本,因为它所需的变量都在总调度脚本中。

    @echo off
    echo set sh=WScript.CreateObject("WScript.Shell") >telnet_tmp.vbs
    ::::::::::::::::::::::::::::::::::::::::::::::
    ::::::::::::::::::::登录::::::::::::::::::::::
    ::::::::::::::::::::::::::::::::::::::::::::::
    echo WScript.Sleep 1000 >>telnet_tmp.vbs
    echo sh.SendKeys "%userid%{ENTER}" >>telnet_tmp.vbs
    echo WScript.Sleep 1000 >>telnet_tmp.vbs
    echo sh.SendKeys "%password%{ENTER}" >>telnet_tmp.vbs
    echo WScript.Sleep 2000 >>telnet_tmp.vbs
    ::::::::::::::::::::::::::::::::::::::::::::::
    :::::::::::::::::::解压缩:::::::::::::::::::::
    ::::::::::::::::::::::::::::::::::::::::::::::
    echo 开始进行解压缩...
    echo sh.SendKeys "cd %untarDir%{ENTER}" >>telnet_tmp.vbs
    echo sh.SendKeys "tar -zxvf H{TAB}" >>telnet_tmp.vbs
    echo sh.SendKeys "{ENTER}" >>telnet_tmp.vbs
    echo WScript.Sleep 2000 >>telnet_tmp.vbs
    ::::::::::::::::::::::::::::::::::::::::::::::
    :::::::::::::拷贝文件到指定目录:::::::::::::::
    ::::::::::::::::::::::::::::::::::::::::::::::
    echo 开始进行拷贝操作...
    echo sh.SendKeys "%copy1%{ENTER}" >>telnet_tmp.vbs
    echo WScript.Sleep 5000 >>telnet_tmp.vbs
    echo sh.SendKeys "%copy2%{ENTER}" >>telnet_tmp.vbs
    echo WScript.Sleep 10000 >>telnet_tmp.vbs
    echo sh.SendKeys "%copy3%{ENTER}" >>telnet_tmp.vbs
    echo WScript.Sleep 10000 >>telnet_tmp.vbs
    echo sh.SendKeys "%copy4%{ENTER}" >>telnet_tmp.vbs
    echo WScript.Sleep 10000 >>telnet_tmp.vbs
    ::::::::::::::::::::::::::::::::::::::::::::::
    ::::::::::::::::::运行程序::::::::::::::::::::
    ::::::::::::::::::::::::::::::::::::::::::::::
    echo 跳转目录,开始进行初始化环境...
    echo sh.SendKeys "cd %do1_dir%{ENTER}" >>telnet_tmp.vbs
    echo WScript.Sleep 1000 >>telnet_tmp.vbs
    echo sh.SendKeys "%do1%{ENTER}" >>telnet_tmp.vbs
    echo WScript.Sleep 15000 >>telnet_tmp.vbs
    
    echo 跳转目录,开始正式运行程序...
    echo sh.SendKeys "cd %do2_dir%{ENTER}" >>telnet_tmp.vbs
    echo WScript.Sleep 1000 >>telnet_tmp.vbs
    echo sh.SendKeys "%do2%{ENTER}" >>telnet_tmp.vbs
    echo WScript.Sleep 10000 >>telnet_tmp.vbs
    ::::::::::::::::::::::::::::::::::::::::::::::::
    :::::::::::::::::开始执行:::::::::::::::::::::::
    ::::::::::::::::::::::::::::::::::::::::::::::::
    echo 开始登陆服务器%url% ..
    start telnet %url%
    cscript telnet_tmp.vbs
    del telnet_tmp.vbs

    程序运行已经通过的,不过我修改了一些服务器信息(公司资料要保密嘛~~~~(>_<)~~~~ ),如果有任何问题,欢迎指正~~

    运行的时候只需要在windows下使用cmd.exe窗口,切换到以上三个程序的所在目录,输入Auto_Update.bat按下回车键即可。

  • 相关阅读:
    Codeforces Round #733
    [ZJOI2007] 时态同步(树形dp)
    最大子树和(树形dp)
    P2015 二叉苹果树
    没有上司的舞会(经典树形dp)
    P3884 [JLOI2009]二叉树问题(LCA)
    Bin Packing Problem(线段树 + multiset)
    P4281 [AHOI2008]紧急集合 / 聚会(最近公共祖先)
    P3128 [USACO15DEC]Max Flow P(LCA 树上差分)
    java中Set接口用法
  • 原文地址:https://www.cnblogs.com/bangbangjiang/p/4010501.html
Copyright © 2020-2023  润新知