IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Операционные системы M$ (http://www.imho.ws/forumdisplay.php?f=2)
-   -   [FAQ] Уведомление о перезагрузке Windows на email/СМС (http://www.imho.ws/showthread.php?t=145840)

Plague 12.04.2011 12:24

Уведомление о перезагрузке Windows на email/СМС
 
Присказка: Произошла тут на выходных неприятность одна: комп на работе ребутнулся (энергетики постарались, козлы: даже ИБП не спас :mad: ). В результате некоторые вещи пол-воскресенья работали не совсем так как надо было. Проблемы зайти по удаленному управлению нет, и делов там - три пимпы ткнуть. Проблема в том, что в общем-то, никто не обязан круглые сутки мониторить: чего там у тебя на работе происходит, согласитесь?
Сказка: И озадачился я вчера на тему написания какого-нить скриптика, который при перезагрузке стучал бы о данном происшествии.
СМС-шлюзы для частников у мобильных провайдеров когда-то были, но уже давным-давно закрыты, так что всяческие софтины для "халявной отправки СМС" - в лучшем случае не будут работать. В худшем - запустят втихаря в работу на вашей машине что-нить совершенно левое, и к отправке СМС не имеющее никакого отношения.

В природе существует консольная утилитка со смешным названием blat
Так же, нам понадобится утиль sleep.exe из Windows Server 2003 Resource Kit Tools. Смешно конечно ради одного екзешника весом в 5кб тянуть и ставить кирпич на 11ть метров, но для "ставить" - есть виртуалка, да и помимо sleep там много чего полезного есть, что можно заархивировать и припрятать - мало ли, понадобится... Кроме того, вроде мне Борланд говорил что на Висте и Семерке Про и выше есть что-то своё с аналогичными функциями (не помню, сам допишет может быть).

Итак, качаем blat, распаковываем, к нему же кидаем sleep.exe.
там же создаем небольшой скриптик blat.cmd
Код:

@echo off
set blatdir=c:\SystemTools\mailreport
set smtpsender=от_кого@сервер.ru
set smtpserver=smtp.сервер.ru
set smtpport=25
set smtpuser=от_кого
set smtppwd="пароль_исходящего_ящика"
set mailto=кому@сервер.ru
set blatsubj="%COMPUTERNAME% ALERT"
set blatbody="%COMPUTERNAME% Rebooted!!"

"%blatdir%\sleep.exe" 600
"%blatdir%\blat.exe" -to %mailto% -f %smtpsender% -server %smtpserver% -port %smtpport% -pu %smtpuser% -ppw %smtppwd% -subject %blatsubj% -body %blatbody%

несколько комментариев:
  • set blatdir=c:\SystemTools\mailreport - Путь к blat.exe и sleep.exe заменить на свой
  • set smtpserver - некоторые шибко умные провайдеры (мой в том числе) блочат 25 порт, требуя использования своих mx-серверов. Просто на всякий случай напоминаю. Вчера полчаса убил пытаясь понять почему не работает, пока не вспомнил про это.
  • %COMPUTERNAME% - глобальная переменная винды. подставит имя компа.
  • ключи -pu и -ppw в команде - если ваш мыл-сервер требует pop3 аутентификацию. В случае AUTH используем -u и -pw; в случае IMAP - -iu и -ipw соответственно.
  • для чего нужен sleep: Обычно компы перегружаются при бросках электричества. В этом случае, как правило, перегружается и коммуникационное оборудование. Другими словами, интернета может просто не быть еще на тот момент когда комп загрузится. Да и различные сетевые сервисы тоже очень желательно подождать пока прогрузятся на машине, прежде чем в сеть долбиться. В моём скрипте установлено ожидание 600 секунд.

Итак, скрипт есть.
Теперь идем в панель управления - назначенные задания и давим там на "Добавить". Далее - "Обзор" - показываем наш скрипт, после чего выбираем "при загрузке компьютера"; в следующем окне пишем что задание должно выполняться от Администратора, вводим его пасс; ставим галку "установить дополнительные параметры после нажатия готово".
В свойствах задания, в строке "выполнить" перед путём до скрипта дописываем c:\Windows\System32\cmd.exe /c
Код:

c:\Windows\System32\cmd.exe /c c:\SystemTools\mailreport\blat.cmd
Проверяем..
Совет: для проверок - значение "600" в строке запуска sleep.exe лучше придавить до 10ти, а то упаритесь ждать :biggrin:

Если есть необходимость получать СМС о данном событии - регим ящик получателя на мыл-сервисах умеющих отправлять СМС о получении нового письма. mail.ru умеет точно: проверял. Гугль, зараза, не умеет :( .
Так же есть некие сложности с использованием gmail в качестве ящика отправителя: blat не умеет работать с серверами, требующими ssl. Варианты обхода существуют (stunnel), но это лишняя "клюква" на машине, да и не проверял я.

Borland 12.04.2011 14:06

Цитата:

Сообщение от Plague (Сообщение 1743296)
Борланд говорил что на Висте и Семерке Про и выше есть что-то своё с аналогичными функциями

Утилита с говорящим названием timeout. :biggrin:
Зато sleep от 2003 сервера не работает на Vista и 7 (во всяком случае - на x64)...
Впрочем, есть и куча "универсальных" sleep под любые мыслимые ОС, накомпилированных добровольцами. ;)
А также и другие методы приостановки выполнения пакетного файла
Но в данном конкретном случае можно было сделать задержку "до появления соединения с SMTP-сервером":
Код:

:INIT
netsh diag connect iphost smtp.сервер.ru 25 || goto INIT

К сожалению, контекст diag из netsh NT6.x убрали, так что решение неуниверсальное, только для XP...
Наиболее универсальным решением, пожалуй, будет банальный ping:
Код:

:INIT
ping -n 2 smtp.сервер.ru || goto INIT

Это практически одинаково отработает на любой ОС. Одно НО: SMTP сервер должен "откликаться" на пинги, иначе эта пауза будет бесконечной...

Замечание:
Цитата:

Сообщение от Plague (Сообщение 1743296)
%USERDOMAIN% - глобальная переменная винды. подставит имя компа.

Исключительно для локального пользователя. В сети с доменами будет имя домена, отвечающего за авторизацию пользователя (хотя да, для пользователя SYSTEM это всегда имя локальной машины).
Более правильным всё-таки является использование переменной %COMPUTERNAME%. ;)

Plague 12.04.2011 14:39

Цитата:

Сообщение от Borland (Сообщение 1743304)
Более правильным всё-таки является использование переменной %COMPUTERNAME%

согласен, я схватил просто первое что на глаза попалось из вывода команды set.
ща исправлю

Plague 08.10.2014 21:29

много воды с тех пор утекло, много еще мы с Борландом понаписали "стукачей" о всяческих эвентах на этой основе.

Цитата:

Сообщение от Plague (Сообщение 1743296)
blat не умеет работать с серверами, требующими ssl. Варианты обхода существуют (stunnel), но это лишняя "клюква" на машине, да и не проверял я.

в свете того, что smtp.mail.ru перестал работать с обычным соединением, решил все-таки копнуть эту клюкву.
Итак, качаем stunnel, ставим. В процессе установки сервис сгенерит для себя самоподписанный сертификат SSL.
Конфиг stunnel.conf для mail.ru
Код:

RNDfile = .rnd
debug = 7
output = stunnel.log
cert = stunnel.pem

options = NO_SSLv2

[mailru-smtp]
client = yes
accept = 127.0.0.1:1125
connect = smtp.mail.ru:465

[mailru-pop3]
client = yes
accept = 127.0.0.1:1110
connect = pop.mail.ru:995

по большому счёту, как выяснилось позже, pop3 не нужен, так что секцию mailru-pop3 можно исключить.

Включаем stunnel как сервис (чтоб грузился надёжней)
Перелопачиваем скрипты: заменяем pop3 авторизацию на AUTH, меняем адрес smtp. Итого, из скрипта приведенного в шапке, получаем:
Код:

@echo off
set blatdir=c:\SystemTools\mailreport
set smtpsender=от_кого@сервер.ru
set smtpserver=localhost
set smtpport=1125
set smtpuser=от_кого
set smtppwd="пароль_исходящего_ящика"
set mailto=кому@сервер.ru
set blatsubj="%COMPUTERNAME% ALERT"
set blatbody="%COMPUTERNAME% Rebooted!!"

"%blatdir%\sleep.exe" 600
"%blatdir%\blat.exe" -to %mailto% -f %smtpsender% -server %smtpserver% -port %smtpport% -u %smtpuser% -pw %smtppwd% -subject %blatsubj% -body %blatbody%

Собственно, и всё. Должно заработать, если я чего не забыл написать.


К слову, документация на stunnel мягко говоря, не блещет подробностями. Я не нашел например, параметра лимита соединений. Но в логе при загрузке оно регулярно ругается на то что он у меня не установлен:
Код:

2014.10.06 13:25:15 LOG7[2420]: No limit detected for the number of clients
Так же я не въехал в параметр импорта сохранённого сертификата сервера. По моему представлению, строки
Код:

CAfile = mailru.pem
verify = 3

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

ps. для того чтоб сделать авторизацию на несколько различных мыл-серверов, достаточно просто раскопировать секцию сервера в stunnel.conf, указав для каждого уникальный порт, и стучать соответственно, для каждого в свой порт.

ccnd 18.02.2015 20:17

Ребят, а не проще реализовать это скриптом, как например ТУТ?
вроде как все стандартное и никакого левого софта на серваке


Часовой пояс GMT +4, время: 14:27.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.