功能实现,实现通过分析日志最后一行代码,来判断是否在写单子,对于没写单子的主机进行升级,使用ansible统一控制批量升级。

实现逻辑

使用ansible批量部署cyg上去,也就是c:\shell目录,包含了cyg里面的库文件和指令。

编写自动windows升级cmd脚本,代码如下

@echo off
::变量和备份目录初始化
set timefmt=%date:~0,4%-%date:~5,2%-%date:~8,2%
if not exist c:\monitor_bak (
mkdir c:\monitor_bak
)
::删除60天前文件
forfiles /p C:\monitor_bak\ /m . -d -60 /C “cmd /c del /f @path\
::备份工作目录中关键文件
move /y c:\monitor\startup.bat C:\monitor_bak\startup_%timefmt%.bat
move /y c:\monitor\settings.properties C:\monitor_bak\settings%timefmt%.properties
move /y c:\monitor\mon*.jar C:\monitor_bak\
::执行升级
if not exist c:\monitor\logs\access.%timefmt%.log (
goto up
exit
) Else (
goto log
exit
)
:log
c:\shell\tail.exe -n 1 c:\monitor\logs\access.%timefmt%.log | findstr “code\”:101″
if %ERRORLEVEL% == 0 (
goto up
exit
)Else (
echo %date%%time% is running >> c:\monitor\logs\up.log
)
exit
:up
schtasks /change /DISABLE /TN “重启 monitor.exe”
taskkill /F /IM chrome.exe
taskkill /F /IM java.exe
taskkill /F /IM EXCEL.exe
C:\ansible\cwrsyncS\rsync.exe -azv 192.168.1.251::soft/monitor/ /cygdrive/c/monitor/
schtasks /change /ENABLE /TN “重启 monitor.exe”
ping -n 127.0.0.1
schtasks /RUN /I /TN “重启 monitor.exe”

编写ansible play book如下

  • name: update hosts: up0401 tasks:
    • name: 复制文件
      win_copy:
      src: /etc/ansible/soft/cpshell.bat
      dest: C:\ansible\cpshell.bat
      ignore_errors: yes
    • name: 执行拉取
      raw: wmic process call create C:\ansible\cpshell.bat
    • name: 执行升级
      raw: wmic process call create C:\shell\run.bat

首先让ansible批量传输一个cpshell.bat到各主机

用这个文件,启动rsync,拉取shell也就是cyg到各windows主机c:\

再执行run.bat也就是我们上面发的那一长串的windows cmd的编程脚本代码。

会首先判断日志是否存在,如果当天日志不存在,直接升级,如果当天日志存在,则判断最后一行是否在写单子,如果在写单子,输出日志,不升级,如果不写单子,执行升级。

发表评论

邮箱地址不会被公开。 必填项已用*标注