Что нового

[Автоматизация] Запуск скрипта по выбранному промежутку времени

bosair

Новичок
Сообщения
1
Репутация
0
Привет.
Есть код программы, который запускает скрипт на рандоме в любое время каждый час:

Код:
While 1
$Minute = Random(1,59,1)
    Do 
        Sleep(1000)
    Until @Min = $Minute
    
   ;Тут мой код
    
    $s = ((60 - $Minute) * 60) * 1000 
    Sleep($s)
WEnd



Что-то не могу понять, то он работает, то нет, в логах txt файла я вижу , что промежутки между записями больше, час.
Как можно сделать , к примеру, так , чтобы он стабильно каждые, допустим, 30 мин, чекал интернет страницу и сохранял в лог файл?

Сам мой код целиком сейчас выглядит так:

Код:
#include <Array.au3>
While 1
$Minute = Random(1,59,1)
    Do
        Sleep(1000)
	 Until @Min = $Minute

InetGet("https://www.www.net/net/get_some_info_isg.php?search=auth", @ScriptDir & "/auth")   
$file 	= FileRead ("auth")
$Time 	= StringRegExp 	($file,'(\s+.*MSK)',3)
$Total 	= StringRegExp	($file,'(Total: )\s+(\d+)\s+(\d+)\s+(\d+)',3)
$hFile = FileOpen("C:\Users\log\autologin\asr.txt", 1)
FileWrite($hFile,$Time[0]& @CRLF& $Total[0]&$Total[3])

  $s = ((60 - $Minute) * 60) * 1000
    Sleep($s)
WEnd


Кратко, что делает скрипт: качает нужную мне страницу из внутренней сети, сохраняет в файл, выдирает из файла лог (обновляется) вида
Код:
Sat Feb 13 16:15:06.830 MSK
Total: 11111

и сохраняет, на данный момент, каждый час (т.е. как-то периодически сохраняет(описано в начале)).
 

СН3СН2ОН

Знающий
Сообщения
78
Репутация
12
1 раз в час
Код:
$hour = Number(@HOUR)
While 1
	$Minute = Random(Number(@MIN), 59, 1)
	Do
		Sleep(1000)
		;Sleep(30000) ??
	Until @MIN = $Minute

	;Тут мой код

	$hour += 1
	Do
		Sleep(1000)
		;Sleep(30000) ??
	Until $hour = Number(@HOUR)
WEnd

Каждые полчаса
Код:
$hour = Number(@HOUR)
While 1
	$Minute_1 = Random(Number(@MIN), 30, 1)
	$Minute_2 = Random(31, 59, 1)
	If Number(@MIN) < 31 Then
		Do
			Sleep(1000)
			;Sleep(30000) ??
		Until @MIN = $Minute_1
		;Тут мой код 1
	EndIf

	If (Number(@MIN) > 30) And (Number(@MIN) < 60) Then
		Do
			Sleep(1000)
			;Sleep(30000) ??
		Until @MIN = $Minute_2
		;Тут мой код 2
	EndIf


	$hour += 1
	Do
		Sleep(1000)
		;Sleep(30000) ??
	Until $hour = Number(@HOUR)
WEnd

Но лучше в планировщике сделать задание
 
A

Alofa

Гость
bosair сказал(а):
... Как можно сделать , к примеру, так , чтобы он стабильно каждые, допустим, 30 мин, чекал интернет страницу и сохранял в лог файл?
Код:
Global $sDownFile = "https://www.www.net/net/get_some_info_isg.php?search=auth" ; URL
Global $sAuthFile = @ScriptDir & "\auth"                                        ; Файл куда грузится информация
Global $sLogFile = "C:\Users\log\autologin\asr.txt"                             ; Лог-файл
Global $iTimeOut = 30 * 60 * 1000                                               ; Интервал времени (30 мин.)

AdlibRegister('_Logging', $iTimeOut)

While Sleep(200)
WEnd

Func _Logging()
	Local $hDownload, $file, $Time, $Total, $sString
	
	$hDownload = InetGet($sDownFile, $sAuthFile, 1, 1)
	Do
		Sleep(150)
	Until InetGetInfo($hDownload, 2) ; Проверка завершения загрузки
	$file = FileRead($sAuthFile)
	$Time = StringRegExp($file, '(\s+.*MSK)', 3)
	$Total = StringRegExp($file, '(Total: )\s+(\d+)\s+(\d+)\s+(\d+)', 3)
	If Not IsArray($Time) Or Not IsArray($Total) Then
		$sString = "<Не получилось>"
	Else
		$sString = $Time[0] & @CRLF & $Total[0] & $Total[3]
	EndIf
	FileWrite($sLogFile, $sString)
	InetClose($hDownload)
	FileDelete($sAuthFile) ; Я бы еще добавил Это
EndFunc   ;==>_Logging



А может лучше так?
Код:
Global $sDownFile = "https://www.www.net/net/get_some_info_isg.php?search=auth" ; URL
Global $sLogFile = "C:\Users\log\autologin\asr.txt" ; Лог-файл
Global $iTimeOut = 30 * 60 * 1000 ; Интервал времени (30 мин.)

AdlibRegister('_Logging', $iTimeOut)

While Sleep(200)
WEnd

Func _Logging()
	Local $file, $Time, $Total, $sString

	$file = BinaryToString(InetRead($sDownFile))
	MsgBox(0, '', $file)
	$Time = StringRegExp($file, '(\s+.*MSK)', 3)
	$Total = StringRegExp($file, '(Total: )\s+(\d+)\s+(\d+)\s+(\d+)', 3)
	If Not IsArray($Time) Or Not IsArray($Total) Then
		$sString = "<Не получилось>"
	Else
		$sString = $Time[0] & @CRLF & $Total[0] & $Total[3]
	EndIf
	FileWrite($sLogFile, $sString)
EndFunc   ;==>_Logging
 
Верх