Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Перезапуск программы при пропадании интернета.

Ответить
Настройки темы
CMD/BAT - Перезапуск программы при пропадании интернета.

Аватара для Инсульт

Ветеран


Сообщения: 981
Благодарности: 159


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Задача такая: Есть коннект менеджер для 4G интернета, но у него нет функции авто-переподключения при обрыве связи.

Есть такой скрипт:
читать дальше »
Код: Выделить весь код
cmdow @ /HID

@echo off

cls

echo %date% - %time%: Connection checking... >>auto.log

set /a WaitTime=120*1
set Address=ya.ru
set /a conn_avail=-1

call :ping
exit

:ping

ping %Address% > Nul

if ERRORLEVEL 0 (
        if %conn_avail%==0 (
                set /a conn_avail=1
                echo %date% - %time%: Connection restored... >>auto.log
        )
)

if ERRORLEVEL 1 (
        if %conn_avail%==-1 (
                echo %date% - %time%: Disconnected! Reconnecting... >>auto.log
        )
        if %conn_avail%==0 (
                echo %date% - %time%: Unable to reconnect... >>auto.log
        )
        if %conn_avail%==1 (
                echo %date% - %time%: Disconnected! Reconnecting... >>auto.log
        )
        set /a conn_avail=0
        call :reboot
)

ping -n %WaitTime% 127.0.0.1 > Nul

call :ping

rem exit /b

:reboot

taskkill /f /im SW_WiMaxCM.exe > Nul

start /D "D:\4G\" SW_WiMaxCM.exe > Nul

exit /b


Работает, но если был дисконект во время таймаута 120с то срабатывает как и положено.
А если дисконект был во время комманды проверки (ping) то программа перезапускается моментально, т.е сначала скрипт пытается запустить еще 1 копию программы не завершая предыдущую. После ошибки программы "programm is running" скрипт останавливается.

-------
Debugged programm was unable to process exception. Terminating...


Отправлено: 13:34, 18-12-2011

 

Пользователь


Сообщения: 148
Благодарности: 39

Профиль | Сайт | Отправить PM | Цитировать


Т.е. он имел в виду, что иногда, даже если сайт не пингуется, команда пинг все равно выдаст успешный результат - и это приведет к перезапуску модема в написанных нами скриптах. Нужно все лишь добавить конец команды пинг это |Find "TTL="
Рассмотрим пример:
1) Ping выдает это:
"Сбой команды ......."
и передает, что завершено все без ошибок ---> скрипт перезагружает модем.

Мы дописываем |Find "TTL=", и теперь уже проверяется успешность выполнения именно этой команды.
Find ищет наличие строки "TTL=" в отчете, выданном предыдущей командой

Знак | как раз его и передает.

--> команда выполнится с ошибкой (строка "TTL="не найдена) ---> скрипт не будет пускать перезагрузку.
Код: Выделить весь код
>ping 8.8.8.8
Обмен пакетами с 8.8.8.8 по с 32 байтами данных:
Ответ от 8.8.8.8: число байт=32 время=64мс TTL=46
Ответ от 8.8.8.8: число байт=32 время=63мс TTL=46
...

>ping 8.8.8.8 | Find "TTL="&&echo Privet!
...
Privet!
Символ && - следующая за ним команда выполняется, если предыдущая (перед &&) выполнена без ошибок (%errorlevel% = 0)
Символ || - следующая за ним команда выполняется, если предыдущая (перед &&) выполнена с ошибкой (%errorlevel% <> 0)

-------
Alex Dragokas


Последний раз редактировалось Dragokas, 22-12-2011 в 01:12.

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:05, 22-12-2011 | #31



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 16
Благодарности: 1

Профиль | Отправить PM | Цитировать


Опять прошу помощи!
Решил начать все сначала. Пишу скрипт, который пингует 3 хоста. Если все 3 не отвечают - перезагружает софт и модем.
Собственно код
Код: Выделить весь код
iPing =   Ping("195.195.195.195")
	iPing1 = Ping1("195.195.195.195")
	iPing2 = Ping2("195.195.195.195")
	strComputer = "."


Set WshShell = WScript.CreateObject("WScript.Shell")
	Command ="d:\Portable\Script\restart_modem\devcon.exe disable USB\VID_1076*"
	Command1="d:\Portable\Script\restart_modem\devcon.exe enable USB\VID_1076*"
	Command2="d:\Portable\Script\restart_modem\devcon.exe restart USB\VID_1076*"
	strProcessKill = "'SW_WiMaxCM.exe'" 
	strProcessStart="d:\Portable\Script\restart_modem\SW_WiMaxCM.lnk"


Function Ping (strTarget)
  Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
  Set colPings = objWMIService.ExecQuery ("Select * From Win32_PingStatus where Address = '" & strTarget & "'AND Timeout=10000 AND BufferSize=1")


  For Each objPing in colPings
    Ping = objPing.StatusCode
  Next
End Function

If iPing=0 Then
WScript.Quit
end if

Function Ping1 (strTarget)
  Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
  Set colPings = objWMIService.ExecQuery ("Select * From Win32_PingStatus where Address = '" & strTarget & "'AND Timeout=10000 AND BufferSize=1")

 For Each objPing in colPings
    Ping1 = objPing.StatusCode
  Next
End Function

If iPing1=0 Then
WScript.Quit
end if

Function Ping2 (strTarget)
  Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
  Set colPings = objWMIService.ExecQuery ("Select * From Win32_PingStatus where Address = '" & strTarget & "'AND Timeout=10000 AND BufferSize=1")

  For Each objPing in colPings
    Ping2 = objPing.StatusCode
  Next
End Function

If iPing2=0 Then
WScript.Quit
end if

Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" _ 
& strComputer & "\root\cimv2") 

Set colProcess = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = " & strProcessKill )
For Each objProcess in colProcess
objProcess.Terminate()
Next 

Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" _
    & ".\root\cimv2")
Set colListOfServices = objWMIService.ExecQuery _
 ("Select * from Win32_Service Where Name ='GCTWiMaxService'")
For Each objService In colListOfServices
    objService.StopService    
	WshShell.Run Command
	WScript.Sleep 2000
	WshShell.Run Command1
	WScript.Sleep 5000
	WshShell.Run Command2
	t = now()
	Set FSO = CreateObject("Scripting.FileSystemObject") 
    	Set f = FSO.OpenTextFile("log.txt", 8, True) 
    	f.WriteLine t 
    	objService.StartService
	WshShell.Run strProcessStart
	Wscript.Echo  "GCT WiMAX USB Network Device restarted"

Next


Столкнулся с одной проблемой. Если модем отсутствует, то скрипт выдает вот такую ошибку
Код: Выделить весь код
C:\Users\admin\AppData\Roaming\WMICodeCreator\MyWMIQuery_Script.vbs(20, 3) (null): 0x80041001
вот в этом месте:
Код: Выделить весь код
For Each objPing in colPings
    Ping = objPing.StatusCode
Мне же нужно, чтобы при отсутствии модема тоже срабатывала перезагрузка. Помогите решить задачу.

Последний раз редактировалось YouHim, 23-12-2011 в 04:04.


Отправлено: 03:58, 23-12-2011 | #32


Аватара для Инсульт

Ветеран


Сообщения: 981
Благодарности: 159

Профиль | Сайт | Отправить PM | Цитировать


Вот так вроде работает как надо:

Код: Выделить весь код
cmdow @ /HID
@Echo Off

Set /A WaitTime=120*1
Set Address=ya.ru -n 15

:Loop
Ping %Address%
If ERRORLEVEL 1 call :RESTART
Ping -n %WaitTime% 127.0.0.1 > Nul
GoTo Loop

:RESTART
taskkill /f /im SW_WiMaxCM.exe > Nul
net stop GCTWiMAXService
devcon disable USB\Class_0a
devcon enable USB\Class_0a
REM devcon disable USB\VID_1076*
REM devcon enable USB\VID_1076*
net start GCTWiMAXService
start /D "C:\Program Files\FreshTel\" SW_WiMaxCM.exe > Nul
exit /b

-------
Debugged programm was unable to process exception. Terminating...


Отправлено: 06:49, 08-02-2012 | #33


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


2 Инсульт:

a) cmdow внешняя утилита, заметил позже
б) Ping %Address% в цикле приводит к ненужному постоянному окну (в XP)
в) нельзя ли вообще без :Loop - проверили и вышли, а повторный запуск через назначенные задания?

-------
WBR, J()KER


Отправлено: 13:11, 21-02-2012 | #34


Аватара для Инсульт

Ветеран


Сообщения: 981
Благодарности: 159

Профиль | Сайт | Отправить PM | Цитировать


Цитата mrjok:
a) cmdow внешняя утилита, заметил позже
б) Ping %Address% в цикле приводит к ненужному постоянному окну (в XP)
в) нельзя ли вообще без :Loop - проверили и вышли, а повторный запуск через назначенные задания? »
a) Иначе никак, если это не устраивает можно воспользоваться BAT компилятором, получится exe файл который будет работать как сервис.
в) В этом случае нужно делать планировщик, либо стороннее ПО, или воспользоваться встроенным в систему.

-------
Debugged programm was unable to process exception. Terminating...


Отправлено: 02:56, 28-02-2012 | #35


Аватара для Инсульт

Ветеран


Сообщения: 981
Благодарности: 159

Профиль | Сайт | Отправить PM | Цитировать


Не поленился написал простенькую программку.
Запускает этот скрипт один раз в 5 минут, а не постоянно пингует.
Скрипт будет работать в скрытом режиме (без окна) как и хотел mrjok

Скрипт теперь должен быть такой:

Код: Выделить весь код
@Echo Off

Set Address=ya.ru -n 8

Ping %Address%
If ERRORLEVEL 1 call :RESTART
GoTo EXIT

:RESTART
taskkill /f /im SW_WiMaxCM.exe > Nul
net stop GCTWiMAXService
devcon disable USB\Class_0a
devcon enable USB\Class_0a
net start GCTWiMAXService
start /D "C:\Program Files\FreshTel\" SW_WiMaxCM.exe > Nul
exit /b

:EXIT
exit

-------
Debugged programm was unable to process exception. Terminating...


Последний раз редактировалось Инсульт, 14-08-2014 в 14:50.


Отправлено: 18:28, 28-02-2012 | #36


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


2 Инсульт:

1) спасибо
2) для devcon как уточнить, что USB\Class_0a

-------
WBR, J()KER


Отправлено: 11:43, 14-03-2012 | #37


Новый участник


Сообщения: 9
Благодарности: 2

Профиль | Отправить PM | Цитировать


то Инсульт:

Как прописать запуск скрипта в шедулер,планируется поместить шедулер в автозагрузку

Отправлено: 16:26, 10-05-2012 | #38


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Отправить PM | Цитировать


Доброго времени суток! Помогите с скриптом! Задача пинговать определенный адрес допустим 192.168.1.100 нужно послать 10 запросов эсли же на 10 запросов нет ответа перезагрузить сервер, если запросы в норме повторить процедуру через 10 минут!

Если конечно возможно то чтобы в момент перезапуска выскакивало окно комп будет перезагружен через 1 минуту, для отмены нажмите допустим "1" не нажал знач перезагруз.

Очень прошу помогите!

Отправлено: 01:11, 01-10-2013 | #39


Новый участник


Сообщения: 2
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Цитата Инсульт:
Не поленился написал простенькую программку.
Запускает этот скрипт один раз в 5 минут, а не постоянно пингует.
Скрипт будет работать в скрытом режиме (без окна) как и хотел mrjok »
Цитата Инсульт:
Не поленился написал простенькую программку.
Запускает этот скрипт один раз в 5 минут, а не постоянно пингует.
Скрипт будет работать в скрытом режиме (без окна) как и хотел mrjok »
Не совсем понял, для чего нужен файл Шедулер.ехе, на вин7 64х не запускаеться.
У меня вопрос другого плана, мне надо чтоб скрипт проверял как наличие интернета, так и работоспособность батника, который вызывает работу програмки, иногда эта програмка вылетает (или подвисает или просто вылетает, особенно когда нету интернета долгое время), и хотелось бы , чтоб скрипт перезапускал тот батник, котоырй вылетатет.

То есть два условия проверки, 1 - интернет, 2- работает ли батник.

Как убить процесс и как запустить, - это я логическим путем установил, а вот как сделать проверку программы ? Здесь мозгов не хватает. Работа программы заключаеться в том, что должен работать CMD , который связаный через интернет с сайтом. Если интернет пропадает, то CMD может "вылетить".

Отправлено: 11:52, 10-11-2013 | #40



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Перезапуск программы при пропадании интернета.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Автоматический перезапуск программы alleo Microsoft Windows 2000/XP 12 24-05-2012 21:39
Перезапуск программы alleo AutoIt 9 21-02-2011 20:25
Прочее - Автоматический перезапуск интернета DJ@XON Сетевые технологии 2 30-06-2010 17:39
CMD/BAT - Перезапуск explorer'а при наличии определённого запущенного приложения Habetdin Скриптовые языки администрирования Windows 2 30-05-2009 17:30
Автоматический перезапуск программы. tueur Программное обеспечение Windows 9 21-09-2004 17:59




 
Переход