Войти

Показать полную графическую версию : [решено] помогите написать скрипт для перезагрузки модема


yanus74
20-08-2012, 12:26
мне нужен скриптик, который будт работать по вот этому алгоритму:
https://dl.dropbox.com/u/61827670/bat.jpg

у1- проверка есть ли пинг до внешнего ресурса, например ya.ru
у2- проверка глобальной переменной, не знаю, наверно она должна быть в файле, если переменная N>=3 то
О2 - выполнить команду ( в моем случае netsh interface set interface name="inet" admin=DISABLED ,тут нужна будет пауза, чтобы обновился маршрут, секунд 5-10
О3 - запустить прогу sendmail
О1 - запустить прогу которая подключится через телнет к роутеру и ребутнет его )
О4- обнулить глобальную переменную N

N++ увеличить глобальную переменную на 1

А то глючный модем уже задолбал (

Зарание спс!

El Sanchez
20-08-2012, 15:26
yanus74, не нужна тут глобальная переменная, я так понял, что вам нужно после 3 перезагрузок модема и неудачном пинге обновить маршрут и отправить письмо, что все плохо.

@Echo Off
SetLocal
Set N=0

:loop
Ping ya.ru -n 2 1>nul&&Exit /B 0
If %N% GEQ 3 (
Echo:netsh interface set interface name="inet" admin=DISABLED
Echo:ping 127.0.0.1 -n 6 1>nul
Echo:sendmail
) Else (
Echo:Start /Wait "" "прога через телнет"
Set /A N+=1
GoTo :loop
)

Красные echo для отладки, удалите в конечном варианте

yanus74
20-08-2012, 16:58
спасибо
скрипт будет запускаться 1 раз в 30 минут, как он будет запоминать значение N ?

просто идея такая, что скрипт проверил, инета нету, перезагрузил, прошло пол часа, проверил, нету ......и на четвертый раз, когда N = 3 , он отключает этот интерфейс, и керио меняет маршрут на другой интерфейс, т.к. этот не доступен, а скрипт отправляет уведомление, что там опять какето фигня с модемом (

El Sanchez
20-08-2012, 18:24
скрипт будет запускаться 1 раз в 30 минут, как он будет запоминать значение N ? »
yanus74, ясно, тогда так:

@Echo Off
SetLocal
Set N=0
(0<count Set /P "N=") 2>nul
Ping ya.ru -n 2 1>nul&&Del /F /Q count 2>nul&&Exit /B 0
If %N% EQU 3 (
Echo:netsh interface set interface name="inet" admin=DISABLED
Echo:ping 127.0.0.1 -n 6 1>nul
Echo:sendmail
) Else (
Echo:Start /Wait "" "прога через телнет"
Set /A N+=1
Call Echo:%%N%%>count
)

yanus74
21-08-2012, 07:49
на команду Echo:(0<count Set /P "N=") 2>nul возвращает "Не удается найти указанный файл."

El Sanchez
21-08-2012, 14:47
возвращает "Не удается найти указанный файл." »
yanus74, а вы зачем Echo: к строке (0<count Set /P "N=") 2>nul добавили? Уберите.

yanus74
21-08-2012, 15:54
yanus74, а вы зачем Echo: к строке (0<count Set /P "N=") 2>nul добавили? Уберите. »
я его добавил для отладки, сюда добавил запуск notepad.exe

Echo:Start /Wait "" "notepad.exe"
выключил на модеме инет ( пинг возвращает заданный узел не доступен)
запустил скрипт, и ничего не произошло, ни какого вывода не было, добавил везде эхо) и получил результат выше
правда я немного модифицировал скрипт, добавил в начале

@Echo Off
d:
d:\bat

могло ли это повлиять на выполнение скрипта?

вот лог выполнения скрипта:
D:\programs\bat>D:\programs\bat\1.bat

D:\programs\bat>D:\programs\bat\1.bat

D:\programs\bat>D:\programs\bat\1.bat

D:\programs\bat>D:\programs\bat\1.bat

D:\programs\bat>D:\programs\bat\1.bat

D:\programs\bat>D:\programs\bat\1.bat

D:\programs\bat>D:\programs\bat\1.bat

D:\programs\bat>D:\programs\bat\1.bat
Start /Wait "" "D:\programs\bat\autoTln.bat"

D:\programs\bat>D:\programs\bat\1.bat - тут я поменял параметр, т.к. первый не сработал
D:\programs\bat\autoTln.bat

D:\programs\bat>

при этом сообщение пинга было таким:
Ответ от 192.168.10.1: Заданная сеть недоступна.
Ответ от 192.168.10.1: Заданная сеть недоступна.
Ответ от 192.168.10.1: Заданная сеть недоступна.
Ответ от 192.168.10.1: Заданная сеть недоступна.
Ответ от 192.168.10.1: Заданная сеть недоступна.
Ответ от 192.168.10.1: Заданная сеть недоступна.

содержание бат файла autoTln.bat
d:
D:\programs\bat
autoTln.exe
программа вредная, требует чтоб ее запускали из ее директории, иначе файлы свои найти не может

сенд мэил тоже бат файлом запускаю, но там одна строка, путь до программы, программа и ключи

yanus74
21-08-2012, 16:28
вроде разобрался , щас еще пару раз проверю

как то через раз срабатывает, не могу понять в чем дело,

запускаю, запускаю скрипт, потом раза с 10го, он срабатывает, запускается батник ( открывается новое окно) пишет:
d:
D:\programs\bat
autoTln.exe
exit
закрывается, и в окне, в котором я запускал скрипт больше ничего не выводит
C:\Documents and Settings\Администратор>D:\programs\bat\1.bat

C:\Documents and Settings\Администратор>

щас снова пробую запустить, ничего не происходит (
не понятно


@Echo Off
SetLocal
Set N=0
(0<count Set /P "N=") 2>nul
Ping ya.ru -n 2 1>nul&&Del /F /Q count 2>nul&&Exit /B 0
If %N% EQU 3 (
Echo:netsh interface set interface name="Guest" admin=DISABLED
Echo:ping 127.0.0.1 -n 6 1>nul
Echo:D:\programs\bat\sandmail.bat
) Else (
Start /Wait "" "D:\programs\bat\autoTln.bat"
Set /A N+=1
Call Echo:%%N%%>count
)
вот картинка, где все вместе открыто

El Sanchez
21-08-2012, 21:30
я его добавил для отладки, сюда добавил запуск notepad.exe »
yanus74, все необходимое для отладки я выделил красным, не нужно ничего дописывать. Давайте по порядку, how it's made:
Set N=0 - присваиваем переменной N значение, равное 0. Это наша глобальная переменная.
(0<count Set /P "N=") 2>nul - ключ /P команды Set предназначен для ручного задания значения переменной N, т.е. в консоли пользователь пишет значение и нажимает Enter (читай - символ перевода строки). Но вместо ручного ввода в консоль пишется содержимое файла count, который будет хранить значение нашей глобальной переменной N, причем только первая строка, т.к. строки в текстовых файлах заканчиваются символом перевода.
Ping ya.ru -n 2 1>nul&&Del /F /Q count 2>nul&&Exit /B 0 - пинг сайта. Если он удачен, то удаляем файл count. Если файл удалится, то выход из скрипта. Тут нужно немного по-другому написать, а именно Ping ya.ru -n 2 1>nul&&(Del /F /Q count 2>nul&Exit /B 0)
Если пинг неудачен, то переменная N сравнивается с числом 3. Если N=3, то смена маршрута, пауза и отправка мыла. Если нет, то реконнект модема, увеличиваем значение N на 1 (Set /A N+=1) и пишем новое значение N в файл count (Call Echo:%%N%%>count).
Проставив echo перед командами, можно реально их не запускать, а просто посмотреть в консоли на эти команды. Имитируем разрыв с модемом, приписав к ya.ru, какой-нибудь символ, запустим скрипт (допустим это первый запуск, файла Count еще нет):

c:\temp>test.bat
Start /Wait "" "прога через телнет" //N=0, в count запишется 1
c:\temp>test.bat
Start /Wait "" "прога через телнет" //N=1, в count запишется 2
c:\temp>test.bat
Start /Wait "" "прога через телнет" //N=2, в count запишется 3
c:\temp>test.bat
netsh interface set interface name="inet" admin=DISABLED //N=3
sendmail
c:\temp>


программа вредная, требует чтоб ее запускали из ее директории, иначе файлы свои найти не может »
Не нужно отдельного bat-файла, пишете:

Start "" /D "D:\programs\bat" /Wait "autoTln.exe"


сенд мэил тоже бат файлом запускаю, но там одна строка, путь до программы, программа и ключи »
Аналогично:

Start "" /D "путь к папке программы" /Wait "программа.exe" ключи программы

yanus74
22-08-2012, 10:18
чет он так и не работает, добавил задание на запуск батника, щас вот посмотрел, у модема не было интернета, дождался запуска по расписанию, окно промигнуло,и все, зпрограмма для перезагрузки роутера не открылась, что делаю не так?(
@Echo Off
SetLocal
Set N=0
(0<count Set /P "N=") 2>nul
Ping ya.ru -n 2 1>nul&&Del /F /Q count 2>nul&&Exit /B 0
If %N% EQU 3 (
netsh interface set interface name="Guest" admin=DISABLED
ping 127.0.0.1 -n 12 1>nul
Start "" /D "D:\programs\nnBackup\sendemail\" /Wait "sendEmail.exe" -f мыло -t мыло -u тема -m Opyat vse slomalos! -s smtp.yandex.ru:25 -xu мыло -xp пароль -o message-charset=windows-1251 -q
) Else (
Start "" /D "D:\programs\bat" /Wait "autoTln.exe"
Set /A N+=1
Call Echo:%%N%%>count
)

для проверки добавил:
echo:1 test
(0<count Set /P "N=") 2>nul
echo:2 test
Ping ya.ru -n 2 1>nul&&Del /F /Q count 2>nul&&Exit /B 0
echo:3 test
запустил, результат был такой:
C:\Documents and Settings\Администратор>D:\programs\bat\1.bat
1 test
2 test

C:\Documents and Settings\Администратор>
при этом, команда пинг возвращает:
C:\Documents and Settings\Администратор>ping ya.ru

Обмен пакетами с ya.ru [87.250.250.203] с 32 байт данных:

Ответ от 192.168.10.1: Заданная сеть недоступна.
Ответ от 192.168.10.1: Заданная сеть недоступна.
Ответ от 192.168.10.1: Заданная сеть недоступна.
Ответ от 192.168.10.1: Заданная сеть недоступна.

Статистика Ping для 87.250.250.203:
Пакетов: отправлено = 4, получено = 4, потеряно = 0
(0% потерь)
Приблизительное время приема-передачи в мс:
Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек

C:\Documents and Settings\Администратор>
мне кажется проблема здесь :
Ping ya.ru -n 2 1>nul&&Del /F /Q count 2>nul&&Exit /B 0

все понятно, условие не верно, пинг возвращает:
Пакетов: отправлено = 4, получено = 4, потеряно = 0
а эта чтука работает если получено 0
Ping ya.ru -n 2 1>nul&&Del /F /Q

т.е. надо двойную проверку, или, если пакеты не приходят обратно вообще или получаем ответ "Ответ от 192.168.10.1: Заданная сеть недоступна."

El Sanchez
22-08-2012, 12:26
что делаю не так? »
yanus74, все правильно. Ясно, пинг говорит, что все хорохо, когда все плохо. Что ж будем копаться в его выводе. Пробуйте:

@Echo Off
SetLocal
Set N=0
(0<count Set /P "N=") 2>nul
Ping ya.ru -n 2 1>nul|FindStr /ir (0%% 1>nul&&(Del /F /Q count 2>nul&Exit /B 0)
If %N% EQU 3 (
netsh interface set interface name="Guest" admin=DISABLED
ping 127.0.0.1 -n 12 1>nul
Start "" /D "D:\programs\nnBackup\sendemail\" /Wait "sendEmail.exe" -f мыло -t мыло -u тема -m Opyat vse slomalos! -s smtp.yandex.ru:25 -xu мыло -xp пароль -o message-charset=windows-1251 -q
) Else (
Start "" /D "D:\programs\bat" /Wait "autoTln.exe"
Set /A N+=1
Call Echo:%%N%%>count
)

yanus74
22-08-2012, 12:55
не корректно работает, пинг есть, а он выполняет запуск

@Echo Off
SetLocal
Set N=0
echo:1
(0<count Set /P "N=") 2>nul
echo:2
Ping ya.ru -n 2 1>nul|FindStr /ir (0%% 1>nul&&(Del /F /Q count 2>nul&Exit /B 0)
echo:3
If %N% EQU 3 (
echo:4
netsh interface set interface name="Guest" admin=DISABLED
ping 127.0.0.1 -n 12 1>nul
Start "" /D "D:\programs\nnBackup\sendemail\" /Wait "sendEmail.exe"
) Else (
echo:5
Start "" /D "D:\programs\bat" /Wait "notepad.exe"
Set /A N+=1
Call Echo:%%N%%>count
)

C:\Documents and Settings\Администратор>D:\programs\bat\1.bat
1
2
3
5

C:\Documents and Settings\Администратор>

El Sanchez
22-08-2012, 15:30
yanus74, пардон

Ping ya.ru -n 2|FindStr /ir (0%% 1>nul&&(Del /F /Q count 2>nul&Exit /B 0)

yanus74
22-08-2012, 15:55
спасибо, буду проверять в полевых условиях, если что, отпишусь)




© OSzone.net 2001-2012