ИнфоАптека ®

Автоматизация аптек и аптечных сетей

Инструменты пользователя

Инструменты сайта


администрирование:дополнения:exserver

Скрипт бесперебойной работы сервера обмена

Как известно, обмен информацией производится сервером обмена информацией ExServerExe.exe. Сервер для каждого почтового ящика запускает свою программу обмена. В некоторых случаях программа обмена «зависает» останавливая весь обмен. Представленный здесь скрипт обеспечит бесперебойную работу сервера обмена информацией.

Алгоритм работы

После запуска скрипта, в файл ExServer.log вносится информация о дате и времени запуска. Затем, выдерживается пауза в 1 минуту и начинается циклическая проверка условий и запуск Сервера обмена.

Начало цикла

Выполняется поиск и принудительное закрытие запущенных программ FtpConnect.exe и FtpConnectUI.exe.

Выполняется поиск процесса ExServerExe.exe.

  • Если процесс обнаружен, то информация заносится в файл ExServer.log и счетчик обнаружений увеличивается на 1.
  • Если процесс ExServerExe.exe обнаружен в течении 3 циклов подряд, то выполняется принудительное его завершение.
  • Если процесс ExServerExe.exe не обнаружен, то выполняется запуск Сервера обмена.

После определенной в настройках скрипта паузы цикл повторяется.

Сервер обмена не запускается в случае обнаружения процессов IABackRest.exe и UServer.exe

Установка и настройка

Скрипт устанавливается в папку сервера обмена. В скрипте, после описания настраиваются параметры работы скрипта:

  • WaitTimeOut - Время задержки перед новым циклом, в минутах.
  • RebootEnable - Выполнять ли перезагрузку компьютера если процесс ExServerExe.exe обнаружен после принудительного закрытия. 1 - перезагружать, 0 - не перезагружать.

Запуск скрипта после перезагрузки компьютера должна обеспечивать служба RunService. Для этого в папке C:\IAUtils\BackRest модифицируйте файл IARestore.bat как показано ниже.

IARestore.bat
C:\IADistrib\Distrib\Utils\AutoUpdate\UClient.exe -m:21 -b -d:C:\IADistrib 
IABackRest.exe
cd ..
cd ExServer
start wscript ExServer.vbs

Скрипт запускается под системной учетной записью и работает даже если пользователь не вошел в систему.

Скачать скрипт

ExServer.vbs
'==========================================================================
'
' Этот файл поможет запускать обмен информацией ПО ИнфоАптека 3.0
' с определенной периодичностью
'
' NAME: ExServer.vbs
' VERSION: 1.9
' AUTHOR: Vladimir Sirenko
' DATE: 20/10/2015
'
' COMMENTS: 
' Установите значение WaitTimeOut в минутах. В ЦО чаще, в аптеках реже.
'
' Если процесс ExServerExe.exe не удается снять 3 раза:
'   RebootEnable = 1 перезагрузка компьютера включена
'   RebootEnable = 0 перезагрузка компьютера выключена
'
' Предложения о доработке присылайте на vmsirenko@gmail.com
'
'==========================================================================

WaitTimeOut = 20
RebootEnable = 1
 
set WshShell = WScript.CreateObject("WScript.Shell")
 
Set objFSO=CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.CreateTextFile("ExServer.log",True)
 
objFile.Write Now() & " === Start === " & vbCrLf
objFile.Write Now() & " --> ExServer; BackRest; Userver; " & vbCrLf
 
rem 
rem 60000 = 1 минута
WScript.Sleep(60000*1)
 
Do While 1=1
 
  FtpConnect = CheckProcess("FtpConnect.exe")
  If FtpConnect = 1 Then KillProcess("FtpConnect.exe")
  FtpConnect = CheckProcess("FtpConnectUI.exe")
  If FtpConnect = 1 Then KillProcess("FtpConnectUI.exe")
 
  If ExServer >= 2 Then KillExServer = KillExServer + KillProcess("ExServerExe.exe")
  If ExServer >= 2 Then objFile.Write Now() & " --> KillProcess ExServerExe.exe - " & KillExServer & vbCrLf
  If ExServer >= 2 Then ExServer = CheckProcess("ExServerExe.exe")
  If ExServer = 0 Then KillExServer = 0
' Если снять задачу не удалось, перезагружаем компьютер 
  If KillExServer >= 3 and RebootEnable = 1 Then Call ReBoot()
 
  ExServer = ExServer + 1
  ExServer = ExServer * CheckProcess("ExServerExe.exe")
  BackRest = CheckProcess("IABackRest.exe")
  Userver = CheckProcess("UServer.exe")
 
  objFile.Write Now() & " --> " & ExServer & ";" & BackRest & ";" & Userver & vbCrLf
 
  If ExServer = 0 and BackRest = 0 and Userver = 0 Then WSHShell.Run "ExServerExe.exe", 0, False
 
  If Hour(Time()) <= 7 or Hour(Time()) >= 21 Then WScript.Sleep(60000*60) Else WScript.Sleep(60000*WaitTimeOut/(ExServer+1))
 
Loop
 
objFile.Close
 
WScript.Quit
 
Function KillProcess( ProcessName )
  strComputer = "."
  Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
 
  KillProcess = 0
  Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = '" + ProcessName + "'")
  For Each objProcess in colProcessList
    objProcess.Terminate()
    KillProcess = 1
  Next
End Function
 
Function CheckProcess( ProcessName )
  strComputer = "."
  Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & strComputer & "\root\cimv2")
 
  CheckProcess = 0
  Set colProcessList = objWMIService.ExecQuery _
    ("Select * from Win32_Process Where Name = '" + ProcessName + "'")
  For Each objProcess in colProcessList
    CheckProcess = 1
  Next
End Function
 
Function ReBoot()
  Set OpSysSet = GetObject("winmgmts:{authenticationlevel=Pkt," _
     & "(Shutdown)}").ExecQuery("select * from Win32_OperatingSystem where "_
     & "Primary=true")
  For each OpSys in OpSysSet
    retVal = OpSys.Win32Shutdown(6)
  Next
End Function
 
'==========================================================================
' История версий
'==========================================================================
' VERSION: 1.9
' DATE: 20/10/2015
' 
' При обнаружении работающего процесса сервера обмена, время каждого 
' последующего запуска сокращается в два раза
' 
' VERSION: 1.8
' DATE: 19/10/2015
' 
' Введен дневной и ночной режим работы. В ночном режиме обмен жёстко 
' установлен раз в 1 час.
' 
' VERSION: 1.7
' DATE: 13/10/2015
' 
' Усеньшено количество обнаружений зависшего процесса сервера обмена 
' с 4 до 3
' 
' VERSION: 1.6
' DATE: 23/06/2015
' 
' Вывод в лог записи о kill exserver происходит после kill. В этой же строке
' выводится его счетчик.
' Перезагрузка включается опционально в зависимости от переменной Reboot.
' 1 - Перезагрузка включена, 0 - Перезагрузка выключена.
' 
' VERSION: 1.5
' DATE: 22/06/2015
' 
' Процесс FtpConnect снимается только если он действительно существует.
' В логе второй строкой идет описание полей.
' 
' VERSION: 1.4
' DATE: 22/06/2015
' 
' Если процесс ExServerExe был снят принудительно три раза подряд не удачно,
' то выполняется принудительная перезагрузка компьютера.
' 
' VERSION: 1.3
' DATE: 22/06/2015
' 
' Если процесс ExServerExe был снят принудительно, то счетчик процесса 
' обнуляется только после не удачной попытки обнаружить его снова.
' 
' VERSION: 1.2
' DATE: 08/06/2015
' 
' Добавлен вывод в лог файл запись о kill exserver
' 
' VERSION: 1.1
' DATE: 25/02/2015
'
' Добавлена метка === Start === в логфайл.
'==========================================================================

Только авторизованные участники могут оставлять комментарии.
администрирование/дополнения/exserver.txt · Последние изменения: 2016/10/30 19:00 (внешнее изменение)