Страница 2 из 3

Re: DynDNs

Добавлено: 22 авг 2014, 20:16
pubuser
Доработал скрипт до такого вида, может кому пригодится. Настройки сделал для яндекс почты но тут кому как угодно, дело вкуса. Решил ввести отдельные адреса - отправителя и получателя, самому себе на ящик как то не кошерно получается отправлять. Тем более что давно есть выделенный ящик под бэкапы роутера. Туда же будут сыпаться письма от скрипта этого)

 Текст скрипта

Код: Выделить всё

{
:global myIP;
:local int "WAN";
:local newaddress [/ip address get [find interface="$int" disabled=no] address];
if ($myIP=$newaddress) do={
:log warning "DynDNS System: ip address on $int not changed, standby."
:delay 2;
:log warning "DynDNS System: Current ip address - $myIP "
:log warning "*************************************************************************"
} else={
:set myIP $newaddress;
:local sysname [/system identity get name];
:local smtpserv [:resolve "smtp.yandex.ru"];
:local Eaccount "mailfrom@yandex.ru";
:local Zaccount "mailto@yandex.ru";
:local pass "mailto-password";
/tool e-mail send from="<$Eaccount>" to=$Zaccount \
server=$smtpserv port=587 user=$Eaccount password=$pass \
start-tls=yes \
subject=("$sysname set new ip: $myIP (" . [/system clock get time] . ")") body=("New ip address $sysname - $myIP");
:delay 2;
:log warning "DynDNS System: ip address on $int has been changed, start script..."
:delay 2;
:log warning "DynDNS System: Interface $int setup new ip address - $myIP"
:delay 2;
:log warning "DynDNS System: New ip address has been sended on E-Mail."
:delay 2;
:log warning "Transfer E-Mail completed!\nAll Done!";
}



Протестировал на динамическом адресе PPP интерфейса - отрабатывает как часы, при изменении ip на интерфейсе шлет мыло, если адрес не поменялся - строчку в лог и ждем следующего срабатывания по шедулеру.

Re: DynDNs

Добавлено: 23 авг 2014, 07:19
podarok66
Логов просто куча получается, ни к чему оно, имхо. Тут ведь как, есть новое письмо - адрес сменился, нету - значит работает старый.
Конечно, в идеале надо бы добавить условие, в котором надо проверить вообще доступность всемирной паутины перед отработкой основного скрипта. Нет доступа - перенос старта скрипта на какое-то время (например, на час).
Но тут уж по желанию...

Re: DynDNs

Добавлено: 29 авг 2014, 08:51
pubuser
Выяснилась еще одна проблема при работе со скриптом. После первого запуска он само собой отсылает на почту ip, но при последующих запусках делает то же самое, хотя не должен,Ю ip то не меняется больше. Путем наблюдения выяснил, что такое происходит, если отслеживаемый интерфейс теряет линк хотя бы на 5-10 секунд. Как нибудь можно писать данные от скрипта в файл на диске микрота, чтобы он оттуда сравнивал значение первый раз определенного ip с текущим значением? Если ip совпадает, ничего не делаем, если не совпадает - переписываем файл новым значением и шлем емайл.

Re: DynDNs

Добавлено: 29 авг 2014, 10:09
podarok66
pubuser писал(а):если отслеживаемый интерфейс теряет линк хотя бы на 5-10 секунд

то этот интерфейс по определению меняет свой адрес (отсутствие адреса - тоже его смена). И скрипт на это реагирует. А как Вы хотели?
Письмо при ребуте - тоже норма, маршрутизатору незачем перезагружаться впустую, вот посмотрел, у меня на домашнем аптайм 35 дней. Видимо с последнего обновления программного обеспечения. В файл писать текст можно, код:

Код: Выделить всё

/file print file=myFile
/file set myFile.txt contents=""

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

Код: Выделить всё

{/file print file=myFile;
:delay 1;
/file set myFile.txt contents="123"}

Но мне эта затея не нравится, честно.

Re: DynDNs

Добавлено: 29 авг 2014, 10:15
pubuser
А чем не нравится? Ведь пишет же скрипт файлы бэкапов, к примеру. А как по вашему пофиксить эту проблему? Ведь фактически ip не меняется даже после вкл\выкл интерфейса.

Re: DynDNs

Добавлено: 29 авг 2014, 10:26
podarok66
pubuser писал(а):А чем не нравится? Ведь пишет же скрипт файлы бэкапов, к примеру. А как по вашему пофиксить эту проблему? Ведь фактически ip не меняется даже после вкл\выкл интерфейса.

Да не вижу я проблемы, правда не вижу. У Вас что, роутер каждые полчаса перезагружается или канал рвется постоянно? Если да, то проблема не в скрипте, а в питании или надо решать с каналом. Скрипт отрабатывает то, что ему сказано, он молодец :-):
Потом, у Вас с какой частотой он срабатывает? Тут частые срабатывания ни к чему, по-моему. Минут 10 интервал в самый раз...
И что значит не меняется? Выключили интерфейс нет адреса, включили - есть. Меняется!!!

Re: DynDNs

Добавлено: 29 авг 2014, 11:49
pubuser
Срабатывает раз в сутки. Переобжал все коннекторы на всякий случай, никаких перезагрузок роутера не было ни раньше ни сейчас, сейчас линк больше не пропадает но скрипт по шедулеру отрабатывая все равно почему то думает что ip поменялся хотя он не изменился, и шлет емайл. В чем по вашему может быть проблема?

Re: DynDNs

Добавлено: 29 авг 2014, 14:15
podarok66
pubuser писал(а):В чем по вашему может быть проблема?

Представления не имею, специально запускал скрипт у себя раз 10 подряд, отрабатывает, как и планировалось. Проверяйте у себя. Логируйте пошагово работу и увидите, где спотыкается программа. Вы думаете строка

Код: Выделить всё

# :log info "Goods!"

это мой каприз? Ничуть, я тоже отлаживал работу скрипта по логам. Это еще только один пункт, в сложных скриптах я при наладке логирую всё, что только смогу...
А Ваша куча логов в скрипте только мусор производит.

Re: DynDNs

Добавлено: 29 авг 2014, 18:59
pubuser
Вручную сколько бы раз подряд не запускал - всегда отрабатывает как надо, пишет ip не изменился и ведет себя как положена. Проблема именно в суточном запуске по шедулеру. Поставил в 9 утра запуск каждый день - отрабатывает и шлет мыло как будто поменялся ip, если руками запустить в любое время другое - пишет что ip не изменен.

Re: DynDNs

Добавлено: 30 авг 2014, 07:01
pubuser
Ну как всегда, проблема была одновременно и проста и сложна) Я случайно заметил такую вещь в скриптах как вкладку Environment. А так же упустил из виду факт что скрипта у меня работало 2, для двух разных интерфейсов от разных провайдеров. И они, запускаясь в разное время, подменяли глобальное значение myIP каждый на свое, теперь все встало на свои места.