Что нового

[Автоматизация] Двойное условие

ar13

Новичок
Сообщения
6
Репутация
0
проверка сервиса на доступность, если не доступен, то подождать 30 секунд, и если еще раз сервис не доступен, то выполнить условие.
Как переделать скрипт под такие условия?

Код:
$sIp = ('192.168.1.200:6885')
$LogFi = ('C:\Users\desktop\admin')

while 1
TCPStartup()
$aIp = StringSplit($sIp, ':')
$socket = TCPConnect($aIp[1], $aIp[2])
If @error Then
   $PIDs = ProcessList('xxx.exe') ;Возвращает двумерный массив, содержащий список выполняемых процессов (имя и PID).
For $i = 1 To $PIDs[0][0] ;$PIDs[0][0] - это количество процессов
   If ProcessExists($PIDs[$i][1]) Then ProcessClose($PIDs[$i][1]) ;Если процесс существует, то закрываем его
   Next
   ShellExecute('"soft.exe"')
   $LF = FileOpen($LogFi, 1)
   FileWrite($LF, & @MDAY ':' & @MON & ':' & @YEAR & ' ' & @HOUR & ':' & @MIN & ':' & @SEC & ' Service restarted!' & @CRLF)
   FileClose($LF)
   Sleep(900000)
Else
   TCPCloseSocket($socket)
EndIf
TCPShutdown()
Sleep(30000)
WEnd
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
как это понял я
Код:
$sIp = ('192.168.1.200:6885')
$LogFi = ('C:\Users\desktop\admin')
Local $chk
While 1
	TCPStartup()
	$aIp = StringSplit($sIp, ':')
	$socket = TCPConnect($aIp[1], $aIp[2])
	If @error Then
		$PIDs = ProcessList('xxx.exe') ;Возвращает двумерный массив, содержащий список выполняемых процессов (имя и PID).
		For $i = 1 To $PIDs[0][0] ;$PIDs[0][0] - это количество процессов
			If ProcessExists($PIDs[$i][1]) Then ProcessClose($PIDs[$i][1]) ;Если процесс существует, то закрываем его
		Next
		ShellExecute('"soft.exe"')
		$LF = FileOpen($LogFi, 1)
		FileWrite($LF, @MDAY & ':' & @MON & ':' & @YEAR & ' ' & @HOUR & ':' & @MIN & ':' & @SEC & ' Service restarted!' & @CRLF)
		FileClose($LF)
		Sleep(900000)
	Else
		TCPCloseSocket($socket)
	EndIf
	TCPShutdown()
	Sleep(30000)
	If Not $chk Then
		$chk = 1
	Else
		MsgBox(64, '', 'Выход из цикла')
		ExitLoop
	EndIf
WEnd
 
Автор
A

ar13

Новичок
Сообщения
6
Репутация
0
суть в том что падает сервис рандомно, он может упасть, и через пять секунд подняться, а может упасть пока не завершишь процесс и не запустишь заново службу.

мой скрипт проверяет сервис на доступность каждые 30 секунд , и если он упал то убивает процесс, и заново запускает исполняемый файл, потом пишет лог! Дальше ждет 15 минут(так как служба долго запускается) и начинает все сначала проверять.
Нужно бесконечный цикл в котором будет двойная проверка доступности службы, если упал то подождать 30 секунд, и опять проверить, если до си пор служба недоступна то убить процесс и запустить новый экземпляр ехе. Далее после запуска подождать 15 минут и заново чекать сервис на доступность.
 

sergioz

Знающий
Сообщения
39
Репутация
5
Код:
$sIp = ('192.168.1.200:6885')
$LogFi = ('C:\Users\desktop\admin')
Global Const $timer_dostup=30*1000;30сек
Global Const $timer_run=15*60*1000;15 минут
Global Const $kill_proc_name="cmd.exe"
Global Const $sleep_time=30*1000;30сек
$time_dostup=TimerInit()
$time_run=TimerInit()
TCPStartup()
$aIp = StringSplit($sIp, ':')
while 1
   $socket = TCPConnect($aIp[1], $aIp[2])
   If @error and TimerDiff($time_dostup)>$timer_dostup Then;если сервис недоступен более $timer_dostup секунд
	  $time_dostup=TimerInit()
	  if ProcessExists($kill_proc_name) and TimerDiff($time_run)>$timer_run Then;если процесс висит более $timer_run минут то килять его с записью в лог
		 RunWait(@ComSpec & ' /c TASKKILL /IM '&$kill_proc_name&' /F /T')
	  EndIf
		 $time_run=TimerInit()
		 run($kill_proc_name);вместо ShellExecute

		 $LF = FileOpen($LogFi, 1)
		 FileWrite($LF, & @MDAY ':' & @MON & ':' & @YEAR & ' ' & @HOUR & ':' & @MIN & ':' & @SEC & ' Service restarted!' & @CRLF)
		 FileClose($LF)
	  
   Else
	  TCPCloseSocket($socket)
   EndIf
Sleep($sleep_time)
WEnd
;~ TCPShutdown()


ну как-то так, вместо CMD.EXE вставть своЁ


If ProcessExists($PIDs[$i][1]) Then ProcessClose($PIDs[$i][1]) - тут нужно добавлять условие по $PIDs[$i][0]="my.exe"
иначе он все процессы в системе поубивает :smile:)) или так и задумано?
 
Верх