Страница 2 из 5
Re: Backup настроек на почту
Добавлено: 13 авг 2016, 19:50
23q
mrrc писал(а):23q писал(а):Код: Выделить всё
/tool e-mail send server=1.1.1.1 port=25 user=q@com password=123 start-tls=yes to=q@com from=q@com subject="fdg" body="sdg"
этот код должен отрабатывать и в консоли и в скрипте
Отрабатывается и в консоли и в скрипте, проверил)
Но рассматриваемые в теме скрипты при этом не отрабатывают.
запускайте их в консоли и ищите ошибку. если будет ругаться на локальные переменные-делаете их глобальными и проверяете выводы.
Re: Backup настроек на почту
Добавлено: 13 авг 2016, 21:22
podarok66
Не надо ничего выдумывать. Всё тело скрипта в { } и пожалуйста вам обработка в консоли.
Для отслеживания выполнения скрипта в консоли пошагово вставляем после каждого шага, требующего контроля "визуализацию" типа
или там, если из раздела скриптов выполнять, то
и смотрите, на каком из шагов затык...
Ну вот к примеру часть кода расчета временного отрезка. В течение отработки кода мы задаем значения переменным, затем изменяем их до нужных с учетом общепринятых временных параметров. Все это видно в консоли при запуске всего куска:
Код: Выделить всё
{
:local Mysymbol ":";
#The variable deltaH can take values from 0 to 23
:local deltaH 5;
#The variable deltaM can take values from 0 to 59
:local deltaM 30;
#The variable deltaS can take values from 0 to 59
:local deltaS 50;
:local MyTime1 ([:pick [/system clock get time] 0 2]+$deltaH);
:local MyTime2 ([:pick [/system clock get time] 3 5]+$deltaM);
:local MyTime3 ([:pick [/system clock get time] 6 8]+$deltaS);
:put $MyTime1;
:put $MyTime2;
:put $MyTime3;
:if ($MyTime3>="60") do={ :set MyTime3 ($MyTime3 - 60); :set MyTime2 ($MyTime2 + 1);} else={:if ($MyTime3<"0") do={ :set MyTime3 ($MyTime3 + 60); :set MyTime2 ($MyTime2 + 1);}};
:if ($MyTime2>="60") do={ :set MyTime2 ($MyTime2 - 60); :set MyTime1 ($MyTime1 + 1);} else={:if ($MyTime2<"0") do={ :set MyTime2 ($MyTime2 + 60); :set MyTime1 ($MyTime1 - 1);}};
:if ($MyTime1>="24") do={ :set MyTime1 ($MyTime1 - 24)} else={:if ($MyTime1<"0") do={ :set MyTime1 ($MyTime1 + 24)}};
:local DeltaPlus [:totime ($MyTime1.$Mysymbol.$MyTime2.$Mysymbol.$MyTime3)];
:put $MyTime1;
:put $MyTime2;
:put $MyTime3;
:put $DeltaPlus;
}
Re: Backup настроек на почту
Добавлено: 14 авг 2016, 16:46
podarok66
mrrc писал(а):Затык был в одном случае из-за некорректного значения tls=yes вместо положенного start-tls=yes
Ну да, скрипт-то был еще для пятой версии программного обеспечения, а сейчас уж ждем-не дождемся седьмую версию. Эта разница в настройках появилась при переходе на шестую версию, я поправил стартовый пост только сейчас. за что вам спасибо
mrrc писал(а):в другом попросту скрипт не был помещен в { }
Помещение в фигурные скобки просто предусматривает исполнение всего блока, как одной команды. Для проверки в консоли самое оно. Для скрипта заключение основного тела скобки необязательно. Но я делаю это обычно, просто по привычке и для удобства
. Если использовать глобальные переменные, то крайне нежелательно определять тело скрипта как локальную область, это чревато ошибками отработки скрипта...
Re: Backup настроек на почту
Добавлено: 15 авг 2016, 11:56
23q
23q писал(а):vqd писал(а):23q писал(а):Как предлагаете отслеживать состояние отправки? Вроде в последних версиях добавили обработчик вывода в терминал. Можно анализировать лог по сообщению "Error sending e-mail" с момента последнего запуска скрипта.
Ну а ip smtp - туда уже можно прописать домен, эту возможность добавили.
Эм ну как бы ексепшн есть а дальше пишите обработку ошибки. Логи то зачем ковырять?
Код: Выделить всё
:do {/tool e-mail send server=1.1.1.1 port=25 user=admin@test.com password=111 start-tls=no to="111@gmail.com" from=admin@test.com subject="555" body="sdg"} on-error={ :log info "hh"}
при недоступности сервера не отрабатывает.
вот что мне ответили.
Hello,
E-mail tool already writes in Log errors about unsuccessful mail deliveries. For example:
11:52:05 system,e-mail,error Error sending e-mail <555>: timeout occurred
E-mail tool itself does not return error in CLI and works in background. On-error is not solution for e-mail tool.
Best regards,
Martins S.
vqd писал(а):23q писал(а):Как предлагаете отслеживать состояние отправки? Вроде в последних версиях добавили обработчик вывода в терминал. Можно анализировать лог по сообщению "Error sending e-mail" с момента последнего запуска скрипта.
Ну а ip smtp - туда уже можно прописать домен, эту возможность добавили.
Эм ну как бы ексепшн есть а дальше пишите обработку ошибки. Логи то зачем ковырять?
или имелось ввиду что-то другое?
Re: С использованием почты Yandex
Добавлено: 02 сен 2016, 21:48
Heavymetall2000
purumtumtum писал(а):В моем случае было удобнее отправлять бэкап с помощью почтовой учетки на яндексе. Скрипт собран из целой кучи других. Его особенности:
- Корректная работа вне зависимости от наличия и настроек SMTP сервера - письма ходят через почтовый сервер Яндекса;
- Корректное имя бэкап-файла (имя_железки + дата + время);
- Критичные методы завернуты в обработчики ошибок, что значительно упрощает отладку и гарантирует четкую последовательность действий;
- Сообщение, приходящее на почту содержит не только файл бэкапа и актуальную информацию о состоянии железки, но и лог событий самой железки;
- Не оставляет за собой старых бэкап-файлов, сохраняя свободное место.
Код: Выделить всё
:local YandexLogin "YANDEX_MAILBOX_NAME@yandex.ru";
:local YandexPassword "YANDEX_MAILBOX_PASSWORD";
:local MailTo "YOUR_MAILBOX_NAME@gmail.com";
:local MailSubject "MikroTik Backup";
:local CurrentTime [/system clock get time];
:local CurrentDate [/system clock get date];
:local Hour [:tostr [:pick $CurrentTime 0 2]];
:local Min [:tostr [:pick $CurrentTime 3 5]];
:local Day [:tostr [:pick $CurrentDate 4 6]];
:local Month [:tostr [:pick $CurrentDate 0 3]];
:local Year [:tostr [:pick $CurrentDate 7 [:len $CurrentDate]]];
:do {
:local FileName ([/system identity get name]."__$Day_$Month_$Year__$Hour_$Min.backup");
/system backup save name=$FileName;
:log info "Backup file ($FileName) created success";
:do {
:delay 2s;
:global logMessages;
:set logMessages ""
:foreach i in=[/log find ] do={
:set logMessages ($logMessages. [/log get $i time ]. " ");
:set logMessages ($logMessages. [/log get $i message ]);
:set logMessages ($logMessages. "\n")
}
/tool e-mail send server=213.180.204.38 port=587 start-tls=yes user=$YandexLogin \
password=$YandexPassword to=$MailTo from=$YandexLogin \
subject=($MailSubject." ($Day/$Month/$Year $Hour:$Min)") \
body=( \
"System information:". \
"\n____________________\n \n". \
"Board name: ".[/system resource get platform]." ".[/system resource get board-name]."\n". \
"Version: ".[/system resource get version]."\n". \
"CPU: ".[/system resource get cpu]." (load ".[/system resource get cpu-load]."%)\n". \
"Free HDD space: ".[/system resource get free-hdd-space]." (total: ".[/system resource get total-hdd-space].")\n". \
"Free memory: ".[/system resource get free-memory]." (total: ".[/system resource get total-memory].")\n". \
"Uptime: ".[/system resource get uptime]. \
"\n \n \n". \
"Last log messages:". \
"\n____________________\n \n". \
$logMessages \
) file=$FileName;
:log info "Mail with backup sending success";
:do {
:delay 3s;
/file remove $FileName;
:log info "Remove backup file success";
} on-error={
:log warning "Cannot remove backup file $FileName";
};
} on-error={
:log warning "Email sending failed!";
};
} on-error={
:log error "Backup creation failed!";
};
Время от времени его немного дописываю, но этот вариант исправно работает уже несколько лет.
Скрипт работает! Круто!
А как исправить проблему при отображении оптайма микротика? У меня написано Uptime 27d 7:23:16 а в письме приходит Uptime 3w6d 7:23:16!
Re: С использованием почты Yandex
Добавлено: 02 сен 2016, 21:53
KARaS'b
Heavymetall2000 писал(а):purumtumtum писал(а):А как исправить проблему при отображении оптайма микротика? У меня написано Uptime 27d 7:23:16 а в письме приходит Uptime 3w6d 7:23:16!
А что конкретно вас не устраивает, то что 27 дней это 3 недели и 6 дней, о чем вам и написано, или в том, что это именно так отображается?
Re: С использованием почты Yandex
Добавлено: 02 сен 2016, 22:01
Heavymetall2000
KARaS'b писал(а):Heavymetall2000 писал(а):purumtumtum писал(а):А как исправить проблему при отображении оптайма микротика? У меня написано Uptime 27d 7:23:16 а в письме приходит Uptime 3w6d 7:23:16!
А что конкретно вас не устраивает, то что 27 дней это 3 недели и 6 дней, о чем вам и написано, или в том, что это именно так отображается?
А, спасибо, я не понял, что это 3 weeks 6 days! Подумал, что это какая-то особая система счисления :)
Re: Backup настроек на почту
Добавлено: 19 ноя 2016, 17:31
Heavymetall2000
Добрый день! Подскажите, как можно определить проблему из-за чего скрипт вылетает с ошибкой! Добавил еще несколько скриптов на свой микротик (отправка внешнего ip на почту, если он изменился) - все работают. А отправка лога и бэкапа на почту перестала работать и выдает ошибку - Email sending failed! После перезагрузки микротика какое-то время все норм работает, потом опять это сообщение!
Re: Backup настроек на почту
Добавлено: 19 ноя 2016, 19:26
podarok66
Ну так сложно сказать. Может ему времени на отправку не хватает, а может еще чего... В вашем варианте отправка вообще идет на два адреса, и с какого из них вы получили это сообщение, можно тоже только гадать. Для отлова косяков я обычно временно логирую все шаги и по логам отличаю, что отработало, а что нет. А у вас даже на неотправку письма на разные адреса логи одинаковые
Re: Backup настроек на почту
Добавлено: 20 ноя 2016, 15:29
Heavymetall2000
podarok66 писал(а):Ну так сложно сказать. Может ему времени на отправку не хватает, а может еще чего... В вашем варианте отправка вообще идет на два адреса, и с какого из них вы получили это сообщение, можно тоже только гадать. Для отлова косяков я обычно временно логирую все шаги и по логам отличаю, что отработало, а что нет. А у вас даже на неотправку письма на разные адреса логи одинаковые
А как включить это логирование? В скрипт какие-то команды добавить надо?