В ряде задач администрирования требуется получать сообщения по какому-либо событию. Например, в мониторинге при падении/поднятии сервера/сервиса, канала и т.п.
Получать письма на e-mail неактуально, т.к. по себе знаю, хоть почта и проверяется раз в 5 минут, но заглядываю туда гораздо реже. Хотелось бы получить, чтото вроде всплывающих сообщений на экран/мобильник, тогда они точно не останутся без внимания, а также, чтоб эти сообщения приходили без задержки (ну или с минимальной задержкой). Таким условиям удовлетворяют 2 способа доставки сообщений:
Способ 1.
SMS и GSM-модем. Плюсы: сообщение получишь, даже если сидишь в сортире)). Недостатки: покупка/выбор мопеда. Не каждый мопед поедет под FreeBSD. Стоимость от 100 вечнозеленых буказоидов, да и за сами смс-ки придется платить. Тут уж как никак а раскошелиться придется.
Способ 2.
Сервис ICQ и ему подобные. Плюсы: минимум затрат, а в случае подключения мобильника — получаешь плюсы от первого способа. Недостатки: для получения смс на мобилу — нужна соответствующая мобила, которая это поддерживает.
Второй способ более привлекательный, как менее затратный. Самый простой в использовании протокол, как оказалось Jabber, вот его то мы и заюзаем.
Практика:
Первое, что необходимо сделать это создать аккаунт в джабере. В моем примере аккаунт регистрируем на jabber.ru
Второе:
Собираем порт /usr/ports/net-im/p5-Net-XMPP
cd /usr/ports/net-im/p5-Net-XMPP
make install clean
Существуют и другие порты для jabber, но будем использовать этот.
Третье:
Собственно сам крипт, отсылающий сообщение:
#! /usr/bin/perl
use Net::XMPP;
my $con=new Net::XMPP::Client();
$con->Connect(hostname=>"jabber.ru");
$con->AuthSend(username=>"user",
password=>"password",
resource=>"ALARM!");
my $msg=new Net::XMPP::Message();
$msg->SetMessage(to=>"reciver\@jabber.ru",
from=>"user\@jabber.ru",
body=>"My First Jabber Message From FreeBSD");
$con->Send($msg);
$con->Disconnect();
Логика скрипта проста. Коннектимся к серверу, отсылаем сообщение и дисконнект:
- user@jabber.ru — авторизуется на jabber.ru
- user (user@jabber.ru) — отсылает сообщение («My First Jabber Message From FreeBSD«) для reciver (reciver@jabber.ru)
- user@jabber.ru — отключается от jabber.ru
Для того, чтобы рассылать сообщение нескольким абонентам, можно создать чат-группу, тогда сообщение посланное кому-то одному, будет переслано всем остальным в группе.
Можно прикрутить русский язык, но об этом позже 🙂 если дойдут руки.
З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !
Автор: folio
Похожие статьи:
- Не найдено
Andrey сказал:
Странно.
30.03.2009, 14:18Сервер в локальной сети. Скопировал скрипт, поменял под свои настройки и не работает. Уже все настройки перепробывал — никак. (((
admin сказал:
1. ты установил порт ?
30.03.2009, 14:352. ты сделал скрипт исполняемым ?
3. какое нить сообщение на экран скрипт выдает ?
4. авторизация на jabber сервере проходит ? в простом клиенте пробовал авторизоваться ?
folio сказал:
Не странно, если ты скрипт запускаешь, когда твой аккаунт в онлайне, работать естесственно не будет. Сам подумай как скрипт прилогинится, если его аккаунт уже заюзан?
30.03.2009, 14:50lehisnoe сказал:
Немного не в тему дискуссии, просто, чтобы не забыть: для отсылки сообщений из php (например, с сайта по некоторому событию) пользуюсь XMPPHP :
< ? include("xmpp.php"); $conn = new XMPP('talk.google.com', 5222, 'username', 'password', 'xmpphp', 'gmail.com', $printlog=False, $loglevel=LOGGING_INFO); $conn->connect();
$conn->processUntil(‘session_start’);
$conn->message(‘someguy@someserver.net’, ‘This is a test message!’);
$conn->disconnect();
?>
30.03.2009, 18:57Andrey сказал:
Порт установил, на экран ничего не выводится. Аккаунт не в онлайне, файл исполняем.
31.03.2009, 09:36Andrey сказал:
В простом клиенте авторизоваться возможно под этим логином и паролем.
Из принципа установил sendxmpp запускаю командой:
echo «Hello» | /usr/local/bin/sendxmpp -u test@10.10.254.128 -p test -s testmessage admin@10.10.254.128
и выдается сообщение:
Error ‘AuthSend’: error: not-authorized[?]
При попытке авторизоваться с ключом -t:
echo «Hello» | /usr/local/bin/sendxmpp -t -u test@10.10.254.128 -p test -s testmessage admin@10.10.254.128
Выводится сообщение:
You requested that XML::Stream turn the socket into an SSL socket, but you don’t have the correct version of IO::Socket::SSL v0.81. at /usr/local/lib/perl5/site_perl/5.8.8/XML/Stream/Node.pm line 547
ЗЫ. xmpphp не использую.
31.03.2009, 09:50lehisnoe сказал:
1. оно же тебе грит, что у тебя нету корректной версии IO::Socket::SSL ( взять можно в портах: /usr/ports/security/p5-IO-Socket-SSL/ ).
31.03.2009, 11:332. Лучше обсуждать неработоспособность чего-либо в форуме.
admin сказал:
Тема на форуме: http://subnets.ru/forum/viewtopic.php?f=6&t=107
31.03.2009, 19:00