Monitoreo del programa WINDOWS y pensamiento de reinicio automático de fallas e implementación de script bat

Recientemente, durante la operación de un sistema antiguo, el proceso del programa se apaga automáticamente con frecuencia. Debido a que el sistema no es mantenido por los desarrolladores, es imposible manejar los errores del programa modificando el código. Por lo tanto, considere escribir un script para monitoreo automático y recuperación automática de fallas.

Fenómeno

Un programa se cerrará automáticamente, otro programa puede tener un error, este programa hará que la base de datos se bloquee.
Procesamiento de ideas:

1. Monitoreo de la base de datos: monitorear los datos escritos en la base de datos e informar de manera anormal cuando el registro escrito es inferior a una cierta cantidad;
2. Monitorear y reiniciar el proceso, y si no hay proceso, reinicie el proceso directamente.
3. Cuando se encuentra la base de datos de monitoreo, a veces la base de datos también se encuentra en un punto muerto, lo que resulta en ninguna consulta de datos, para juzgar la base de datos de consulta y reiniciar el servicio de base de datos cuando la consulta de la base de datos es anormal.

Implementación de script

1. Monitoreo de la base de datos (script vb) gn2.vbs:

Function Format_Time(s_Time)
    Dim y, m, d, h, mi, s
    Format_Time = ""
    If IsDate(s_Time) = False Then Exit Function
        y = cstr(year(s_Time))
        m = cstr(month(s_Time))
        If len(m) = 1 Then m = "0" & m
        d = cstr(day(s_Time))
        If len(d) = 1 Then d = "0" & d
        h = cstr(hour(s_Time))
        If len(h) = 1 Then h = "0" & h
        mi = cstr(minute(s_Time))
        If len(mi) = 1 Then mi = "0" & mi
        s = cstr(second(s_Time))
        If len(s) = 1 Then s = "0" & s
    Format_Time = y  & "-" & m & "-" & d & " "  & h & ":"  & mi & ":"  & s
End Function

'数据库连接字符串
Dim DBConnStr
DBConnStr = "PROVIDER=SQLOLEDB;DATA SOURCE=111.111.222.222,1433;UID=sa;PWD=1122aa.0;DATABASE=database"

Dim v_DBRecordSet
Dim v_DBRecCnt
Dim v_CheckTime

'计算查询时间 当前时间往前5分钟
v_CheckTime = DateAdd("n",-5,now())
v_DBRecCnt = 0

'创建记录集对象
On Error Resume Next
Set v_DBRecordSet=CreateObject("ADODB.Recordset")
If Err.Number Then
WScript.Echo "Message:" & Err.Description
WScript.Quit(1)
End If

'初始化记录集参数
v_DBRecordSet.CursorType = 0
v_DBRecordSet.CursorLocation = 2
v_DBRecordSet.LockType = 1
v_DBRecordSet.Source = "Select count(*) as CN from RunLog where SysDatetime >'" & Format_Time(v_CheckTime) & "'" 

On Error Resume Next
v_DBRecordSet.ActiveConnection = DBConnStr
If Err.Number Then
WScript.Echo "Message:" & Err.Description
WScript.Quit(1)
End If

On Error Resume Next
v_DBRecordSet.Open()
If Err.Number Then
WScript.Echo "Message:" & Err.Description
WScript.Quit(1)
End If

On Error Resume Next
v_DBRecCnt = v_DBRecordSet.Fields("CN")
If Err.Number Then
WScript.Echo "Message:" & Err.Description
WScript.Quit(1)
End If

'如果等于0,则报警
if CInt(v_DBRecCnt) >100 Then
                '关闭记录集
           v_DBRecordSet.Close()
                Set v_DBRecordSet = Nothing
    '正常退出
           WScript.Echo "前5分钟存储条数:" & v_DBRecCnt
    WScript.Quit(0)
else
                '关闭记录集
           v_DBRecordSet.Close()
                Set v_DBRecordSet = Nothing
    '异常退出
           WScript.Echo "前5分钟存储条数:" & v_DBRecCnt
    WScript.Quit(1)
end if

2. Script relacionado con la base de datos de monitoreo y reinicio del servicio (script de bat):

setlocal enabledelayedexpansion
cscript //nologo c:\gn2.vbs
If ERRORLEVEL 1 (net stop SQLSERVERAGENT
net stop MSSQLSERVER
PING 172.18.18.2 -n 2
net start MSSQLSERVER
net start SQLSERVERAGENT
echo %date:~0,10% %time:~0,8% Restart MSSQLSERVER Service >>c:\RESTART_GN.txt ) else goto check_gn_carrunlog
:check_gn_carrunlog
set /a carrunlog2data=0
PING 172.18.18.2 -n 50
for /f "delims=" %%! in ('cscript //nologo c:\gn2.vbs') do set /a carrunlog2data =%%!
if "%carrunlog2data%" leq "0" (
call RESTART_GN.bat)

else exit

3. Proceso de monitoreo automático y reinicio de secuencia de comandos de proceso (secuencia de comandos bat):

setlocal enabledelayedexpansion
echo ############################时时监控,请勿关闭!######################### 
ping 172.18.18.2 -n 10 
tasklist /nh|find /i "w3wp.exe"  
If ERRORLEVEL 1 (start C:\web\web通信服务器\w3wp.exe 
echo %date:~0,10% %time:~0,8% Restart w3wp.exe >>c:\Restart_WEB.txt
 ) else exit

4. Para ejecutar el script anterior regularmente, el plan original se ejecutó automáticamente al arrancar, pero tenga en cuenta que ocasionalmente se reiniciará manualmente el programa. En cambio, la tarea programada de WINDOWS lo llamará y ejecutará regularmente (5 minutos o 10 minutos). El efecto de ejecución actual es mejor.

Supongo que te gusta

Origin blog.51cto.com/57041/2489373
Recomendado
Clasificación