在Windows中使用批处理脚本将程序包分发至Linux服务器

在Windows中,极少有人会椒通过批处理命令实现批量重命名,甚至与Linux传输数据、执行shell命令等,正好公司遇到这类需求,于是写了这个自动化脚本:

  • 将下载到Windows服务器的应用集通过调用其他脚本进行分包
  • 删除无效文件后对应用包目录进行重命名并标记需要重启的服务
  • 将应用包复制到指定Linux服务器中的部署目录中
  • 在Weblogic控制台部署完毕后回到脚本重启服务

备注:在Windows命令提示符中执行ssh/scp等命令是因为安装了Windows版的OpenSSH,安装并配置好环境变量即可。而且,Windows中的批处理能力跟Linux中相比真的好垃圾!!!

@echo off
rem 待分发的程序包所在的目录
set srcBase=D:\Apps\directoryName

rem 部署日志文件
set logFile=publish.log

echo --------- %date% --------- >> %logFile%

rem 检查需要使用的批量分包脚本
rem 批量分包脚本用于将统一打包的应用集分到相应的目录
set batName=batchName.bat
if not exist %srcBase%\%batName% (
  echo %time:~0,8% 批量分包脚本不存在 >> %logFile%
  exit
)

rem 获取最后更新的目录
for /f "delims=" %%i in ('dir /b /ad /od "%srcBase%"') do set "str=%%~i"
echo 确认最后更新的目录是否正确:%str%
echo 若目录错误请直接关闭此窗口
pause
echo %time:~0,8% 即将对目录%str%中的程序包进行分发 >> %logFile%

rem 调用批量分包即本进行分包
set srcPath=%srcBase%\%str%
:: srcPath是根目录中最新修改过的文件夹
set batFile=%srcPath%\%batName%
:: 需要将批量分包脚本复制到指定目录中执行
set plugDir=%srcPath%\packages
:: 统一打包的应用集所在的目录
if not exist %plugDir% (
  echo %time:~0,8% 在%str%中没有待拆分的应用集 >> %logFile%
  exit 0
) else (
  echo %time:~0,8% 将批量分包脚本复制到%str%中 >> %1ogFile%
  copy %srcBase%\%batName% %batFile%
  echo %time:~0,8% 开始执行批量分包脚本 >> %logFile%
  cd %str%
  call %batFile%
)

rem 删除程序所在目录中无效文件
for /f "delims=" %%j in ('dir /ad /b %srcPath%\^|sort /r') do (
  rd "%%j"
)
rd /S /Q %plugDir%
del %batFile%
cd ..
echo %time:~0,8% 完成文件清理 >> %logFile%

rem 将程序所在目录中的有效文件夹重命名并标记需要重启的服务
:: 涉及到的服务名:service1 service2 service3
:: 服务名与程序包所在的文件夹名称相同
set flag_service1=0
set flag_service2=0
set flag_service3=0
cd %str%
for /f "delims=" %%j in ('dir /ad /b %srcPath%\^|sort /r') do (
  set /a flag_%%j += 1
  ren "%%j" "%%j_%str%"
  timeout /T 1 /NOBREAK
)
cd ..
echo %time:~0,8% 完成应用目录重命名 >> %logFile%

rem 备份目标服务器中的程序包
set rmtUser=weblogic
set rmtHost=10.10.100.100
set desPath=/home/weblogic/appPath/deploy/
set backCmd=mv *_*_* History/
ssh %rmtUser%@%rmtHost% "cd %desPath% && %backCmd%"
echo %time:~0,8% 已完成目标服务器数据备份 >> %1ogFile%

rem 将应用程序复制到目标服务器
scp -r %srcPath%\* %rmtUser%@%rmtHost%:%desPath%
echo %time:~0,8% 已将程序包复制到目标服务器 >> %logFile%
echo 现在可以登录控制台部署程序包了
pause

rem 在控制面板部署完毕后重启服务
echo 如果不需要重启服务请关闭此窗口
pause
set remoteHost1=10.10.100.101
:: serviceInHost1: service1 service2
set remoteHost2=10.10.100.102
:: serviceInHost2: service1 service3
if flag_service1 GTR 0 (
  ssh %rmtUser%@%remoteHost1% "cd apps && ./restart service1"
  echo %time:~0,8% 已重启%remoteHost1%服务器的service1服务 >> %logFile%
  timeout /T 1 /NOBREAK
  ssh %rmtUser%@%remoteHost2% "cd apps && ./restart service1"
  echo %time:~0,8% 已重启%remoteHost2%服务器的service1服务 >> %logFile%
  timeout /T 3 /NOBREAK
)
if flag_service2 GTR 0 (
  ssh %rmtUser%@%remoteHost1% "cd apps && ./restart service2"
  echo %time:~0,8% 已重启%remoteHost1%服务器的service2服务 >> %logFile%
  timeout /T 3 /NOBREAK
)
if flag_service3 GTR 0 (
  ssh %rmtUser%@%remoteHost2% "cd apps && ./restart service3"
  echo %time:~0,8% 已重启%remoteHost2%服务器的service3服务 >> %logFile%
  timeout /T 3 /NOBREAK
)

原创文章禁止转载:技术学堂 » 在Windows中使用批处理脚本将程序包分发至Linux服务器

精彩评论

6+5=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏