1 (изменено: space-manometr, 2016-09-03 12:10:27)

Тема: VBS: Поиск данных в обновляемом файле

Доброго времени суток.
После перезагрузки сервера запускается некий сервис в течении 40 минут. Нужно получить сообщение, когда он полностью стартовал. Во время всей процедуры запуска создается некий лог, в котором пишутся все этапы запуска, и окончание запуска оканчивается записью STARTED_SUCCESSFULLY. Пробовал использовать код по аналогии в
http://forum.script-coding.com/viewtopic.php?id=6661


option explicit
Dim objFSO, txtFile, x, done
Set objFSO = Createobject("Scripting.FileSystemObject")
Set txtFile = objFSO.OpenTextFile("D:\test\startup.log",1)

Do
Do While Not txtFile.AtEndOfStream
  x=txtFile.Readline
  If InStr(x, "STARTED_SUCCESSFULLY") Then
      MsgBox "Сервер запущен"
	  done = true
      Exit Do
  End If  
 Loop
Loop

Не знаю, что надо указать, чтобы скрипт постоянно мониторил изменения в файле до тех пор, пока не найдет соответствующую фразу, после чего выдал сообщение и закрылся. Спасибо за возможную помощь.

2

Re: VBS: Поиск данных в обновляемом файле

space-manometr
Т.е. до истечения 40 мин эти проверки не справляются?

3 (изменено: space-manometr, 2016-09-05 09:51:09)

Re: VBS: Поиск данных в обновляемом файле

Flasher

Нет, так как сама служба запускается при старте системы, а сам сервис (в частности речь о Tomcat) дает знать о запуске только в логах, при появлении записи Started_successful.

4

Re: VBS: Поиск данных в обновляемом файле

space-manometr
Служба может запускаться когда угодно, и знать о времени запуска совершенно не требуется, методы проверяют состояние.
Т.е. если служба была ранее запущена и IsServiceRunning возвращает False, то в цикле ждём, когда вернёт True.
Если сразу возвращает True, то вариант, конечно, не годится.
CanStartStopService стоит проверить на то, как он себя ведёт до/после полноценного старта.

5

Re: VBS: Поиск данных в обновляемом файле

CanStartStopService ведет себя одинаково, т.к. служба уже в статусе "Выполняется" и дальнейшие процессы не отслеживаются скриптом.

6

Re: VBS: Поиск данных в обновляемом файле

А IsServiceRunning? И то, что служба в статусе "Выполняется", не значит, что во всех случаях CanStartStopService показывает одно и то же.

По поводу лога.
1. Он каждый раз обновляется при старте или дописывается?
2. В какой он кодировке?
3. В конце текста может быть возрат каретки и/или перевод строки, или там всегда строчный символ?

7

Re: VBS: Поиск данных в обновляемом файле

1. Он создается при запуске отдельно, замещая предыдущий. Просто файл startup.log, который дополняется информацией до тех пор, пока сервис полностью не запустится.
2. в кодировке UTF-8
3. Не совсем понимаю о чем речь... Если нужно - я могу кинуть ссылку на сам файл.

8

Re: VBS: Поиск данных в обновляемом файле

2. С ВОМ / без?
3. Пока не надо. Открываем файл, жмём Ctrl+End. Курсор встаёт на конец последней строки или на пустую строку?

9 (изменено: wisgest, 2016-09-13 06:07:24)

Re: VBS: Поиск данных в обновляемом файле

1) JScript.
2) Ловится строка, начинающаяся со «STARTED_SUCCESSFULLY» с возможным продолжением.
3) Строки должны разделятся символами LF или CR+LF.
4) Если файл в кодировке UTF-8 начинается с BOM и искомая строка — самая первая, то она не будет отловлена и скрипт не завершится.

var LogFileSpec = "D:\\test\\startup.log";
var FS = new ActiveXObject("Scripting.FileSystemObject");
while (!FS.FileExists(LogFileSpec)) WScript.Sleep(1);
var LogFile = FS.OpenTextFile(LogFileSpec, 1 /*ForReading*/);
var line = "";
do {
	while (LogFile.AtEndOfStream) WScript.Sleep(1);
	var char = LogFile.Read(1);
	if (char == '\n') {line = ""; continue;} else line += char;
} while (line != "STARTED_SUCCESSFULLY");
LogFile.Close();
WScript.Echo("Сервер запущен");

P.S. Если файл создаётся программно путём последовательной дозаписи, то, скорее всего, он не содержит BOM.

10

Re: VBS: Поиск данных в обновляемом файле

За 40 минут там приличный лог набьётся, я бы OpenTextFile не мучал.

11 (изменено: wisgest, 2016-09-13 06:02:29)

Re: VBS: Поиск данных в обновляемом файле

Flasher, не понял. OpenTextFile вызывается однократно.

12

Re: VBS: Поиск данных в обновляемом файле

Я понимаю, что однократно, но приходится каждую строку читать с начала вместо нормального чтения с конца.