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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] помогите написать скрипт для перезагрузки модема (http://forum.oszone.net/showthread.php?t=240953)

yanus74 20-08-2012 12:26 1973277

помогите написать скрипт для перезагрузки модема
 
мне нужен скриптик, который будт работать по вот этому алгоритму:


у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 1973377

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 1973448

спасибо
скрипт будет запускаться 1 раз в 30 минут, как он будет запоминать значение N ?

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

El Sanchez 20-08-2012 18:24 1973523

Цитата:

Цитата yanus74
скрипт будет запускаться 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 1973786

на команду
Код:

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

El Sanchez 21-08-2012 14:47 1973977

Цитата:

Цитата yanus74
возвращает "Не удается найти указанный файл." »

yanus74, а вы зачем Echo: к строке (0<count Set /P "N=") 2>nul добавили? Уберите.

yanus74 21-08-2012 15:54 1974017

Цитата:

Цитата El Sanchez
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 1974042

Вложений: 1
вроде разобрался , щас еще пару раз проверю

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

запускаю, запускаю скрипт, потом раза с 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 1974239

Цитата:

Цитата yanus74
я его добавил для отладки, сюда добавил запуск 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>

Цитата:

Цитата yanus74
программа вредная, требует чтоб ее запускали из ее директории, иначе файлы свои найти не может »

Не нужно отдельного bat-файла, пишете:
Код:

Start "" /D "D:\programs\bat" /Wait "autoTln.exe"
Цитата:

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

Аналогично:
Код:

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

yanus74 22-08-2012 10:18 1974501

чет он так и не работает, добавил задание на запуск батника, щас вот посмотрел, у модема не было интернета, дождался запуска по расписанию, окно промигнуло,и все, зпрограмма для перезагрузки роутера не открылась, что делаю не так?(
Код:

@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 1974599

Цитата:

Цитата yanus74
что делаю не так? »

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 1974617

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

Код:

@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 1974701

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 1974721

спасибо, буду проверять в полевых условиях, если что, отпишусь)


Время: 07:35.

Время: 07:35.
© OSzone.net 2001-