Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Время ожидания окончания работы программы (http://forum.oszone.net/showthread.php?t=133336)

SanyaJoker 27-02-2009 16:49 1050625

Время ожидания окончания работы программы
 
Доброго времени суток!

Возникла такая проблема необходимо запустить bat скрипт который в свою очередь выполняет свои задачи но при этом часто возникают ошибки о которых bat скрипт не знает и считает это продолжением своей работы. Я хочу реализовать на AutoIT запуск этого bat скрипта и по истечению определенного времени если bat скрипт не выполняется до конца AutoIT отсылал net send на определенные компьютеры что произошла ошибка. Как можно это реализовать в AutoIT?

Заранее благодарен!

amel27 28-02-2009 04:37 1051004

Во-первых, как AutoIT должен определить, что "bat скрипт не выполняется до конца"?
Во-вторых, не проще ли в таком случае переписать весь BAT на AutoIT?

SanyaJoker 02-03-2009 10:13 1052644

Ну я так думаю можно осуществить с помощью RunWait с ожиданием окончания запущенного скрипта можно конечно и перебить весть скрипт на AutoIT но суть проблемы остается та же если часть кода не выполняется определенное время нужно отослать net send на определенные компьютеры. Вот именно это у меня и не получается осуществить...

amel27 02-03-2009 11:47 1052710

отослать NET SEND думаю тоже не проблема (или проблема?)... мне к примеру неясно, что значит "часть кода не выполняется определенное время"?.. в смысле "время выполнения CMD больше заданного интервала" или что-то другое?.. давайте без двусмысленностей в формулировках, а еще лучше выложить какой-никакой пример

SanyaJoker 02-03-2009 14:12 1052843

Хорошо рассказываю дословно ситуацию. Есть сервер КПК на который через интернет сливают заявки бегающие в поле агенты, затем каждые 15 минут происходит выгрузка этих заявок из КПК в 1С, вот тут и возникает проблема. При выгрузке заявок из базы данных КПК в пост операцию забит этот самый батник который пинает 1С на их загрузку в базу. Но при этом бывает возникают проблемы как пример возьмем проблему занят каталог пользователя. 1С выдает при этом ошибку в ожидании вмешательства пользователя. В свою очередь батник все еще считает что задача выполняется и это может длится до бесконечности. Поэтому и хочется найти вариант если этот батник не выполнился так скажем за 10 минут отправить на определенные компьютеры net send о том что операция задержалась...

amel27 03-03-2009 14:06 1053724

Цитата:

Цитата SanyaJoker
хочется найти вариант если этот батник не выполнился так скажем за 10 минут отправить на определенные компьютеры net send о том что операция задержалась »

если навскидку примерно так, при желании "NET SEND" можно переписать через UDF вместо CMD:
Код:

Dim $aCOMP[3] = ["COMP1","COMP2","COMP3"]
; Команда запуска скрипта
$CMD1 = @ComSpec & " /c " & 'C:\TEST\script.cmd'
$TEXT = "Текст сообщения"
; Запуск скрипта в скрытом окне
$PID = Run($CMD1, "", @SW_HIDE)

While 1
    $RET = ProcessWaitClose ($PID, 600) ; ожидание завершения
    If $RET Then ExitLoop              ; выход при успехе
    For $i=0 To UBound($aCOMP)-1        ; перебираем хосты
        ; Команда отправки сообщения очередному хосту

        $CMD2 = @ComSpec & " /c " &'NET SEND '& $aCOMP[$i] &' "'& $TEXT &'"'
        RunWait($CMD2, "", @SW_HIDE) ; запуск CMD команды в скрытом окне
    Next
WEnd

З.Ы. извиняюсь, не было возможности протестировать

SanyaJoker 03-03-2009 18:27 1053984

Скрипт запускается все работает. Вот тока ожидание завершения не проходит (то есть 1С выдает ошибку а скрип висит так понимаю у меня ожидание стоит 1 секунда). Перебил на свой лад тестил на минимальном времени ожидания завершения сейчас он выглядит так:


Код:

Dim $aCOMP[3] = ["admin1","admin3","kpk"]
; Команда запуска скрипта
$CMD1 = @ComSpec & " /c " & 'D:\1C\URBD\Vigr_KPK_ZEN.cmd'
$TEXT = "Задержалась выгрузка на 1cserver2"
; Запуск скрипта в скрытом окне
$PID = Run($CMD1, "", @SW_HIDE)

While 1
    $RET = ProcessWaitClose ($PID, 1) ; ожидание завершения
    If $RET Then ExitLoop              ; выход при успехе
    For $i=0 To UBound($aCOMP)-1        ; перебираем хосты
        ; Команда отправки сообщения очередному хосту
        $CMD2 = @ComSpec & " /c " &'NET SEND '& $aCOMP[$i] &'"'& $TEXT &'"'
        RunWait($CMD2, "", @SW_HIDE) ; запуск CMD команды в скрытом окне
    Next
WEnd

Может чего то сделал не правильно?

amel27 04-03-2009 07:30 1054459

Цитата:

Цитата SanyaJoker
1С выдает ошибку а скрип висит так понимаю у меня ожидание стоит 1 секунда »

скрипт крутится в бесконечном цикле, периодически (через 1 сек.) проверяя наличие процесса, если процесс в памяти - отрабатывает "NET SEND", если уже нет - выходит из цикла... т.е. только по завершению работы батника... разве не это было нужно?

...сообщения-то отправляются хоть?

SanyaJoker 04-03-2009 10:42 1054566

Все правильно, как раз это и нужно но сообщение не отправляется.

amel27 04-03-2009 12:05 1054630

Цитата:

Цитата SanyaJoker
но сообщение не отправляется »

а, понятно - я пропустил пробел между именем хоста и текстом сообщения (исправил), на будущее - отлаживать CMD нужно, заменив "/c" на "/k" (не закрывать окно) и убрав @SW_HIDE (отображать окно), тогда видно текст ошибки

SanyaJoker 04-03-2009 14:33 1054742

Вот теперь все прекрасно работает :) Большое человеческое спасибо за помощь. Респект и уважуха amel27 :)


Время: 15:59.

Время: 15:59.
© OSzone.net 2001-