SendXMPP - это Perl-скрипт для отправки сообщений на XMPP (Jabber) сервер. Работает почти так же, как программа mail при отправке почты. SendXMPP можно использовать для отправки сообщения на xmpp сервер для предупреждения или уведомления пользователей.
Итак, для начала нам нужно поставить SendXMPP. Для Debian/Ubuntu это можно сделать так:
sudo aptitude install sendxmppГотово. Теперь надо настроить SendXMPP, чтобы он знал на какой сервер под каким логином и паролем ему коннектиться. Для этого нужно создать файл ~/.sendxmpprc и записать в него настройки:
vim ~/.sendxmpprcТут servername@jabber.domain.ru:5222 - логин, сервер и порт, PaSSwD - пароль.
servername@jabber.domain.ru:5222 PaSSwD
Теперь нужно выставить на него такие права, чтобы этот файл мог читать только тот юзер, от имени которого будет зпапускаться SendXMPP:
chmod 400 ~/.sendxmpprcВсе, готово. Установка и настройка закончены.
Теперь пара примеров по использованию SendXMPP.
Пример 1:
Задача: Узнать когда процессор сервера будет под большой нагрузкой.
Решение: Запихнуть в кронтаб вот этот однострочник, чтобы "каждые 5 сек." выполнялся:
if [[ $(ps aux | awk '{print $3}' | sort -nr | head -n 1 | sed 's/\..*//g' ) -ge 70 ]] ;\НО(!) имей ввиду, что это просто пример, в реальной жизни такой однострочник не стоит использовать, т.к. если какой-либо процесс загрузит проц, то тебе будут постоянно идти сообщения, что не есть гуд. В реальной жизни надо сделать провеку, т.е. типа если уже отправлено сообщение, то "поднимаем флаг" и больше не отправляем, когда нагрузка спала, "опускаем флаг".
then ps aux | awk '$3>70' | sendxmpp -s 'CPU Load > 70%' admin@jabber.domain.ru ; \
fi
Пример 2:
Задача: Нужно отслеживать все подключения к SSH-серверу.
Решение: Создать файл /etc/ssh/sshrc с содержанием:
echo "Date:\t\t$(date +%d.%m.%Y\ %H:%M:%S)\nRemote Host:\t$SSH_CONNECTION\nUser:\t\t$USER\nShell:\t\t$SSH_TTY" |\Теперь при любом подключении будет приходить сообщение в jabber с указанием даты, времени, ip подключившегося, имя этого юзера и на какой шелл он повесился.
sendxmpp -s 'SSH Login on GLPI Server' -r 'GLPI Server' -u UserName -j jabber.domain.ru:5222 -p 'PaSSwD' admin@jabber.domain.ru
Пояснения ключей:
-s - тема сообщения (у меня русские буквы не отображает, в теле все хорошо)
-r - ресурс
-u - имя юзера, для логина на jabber-сервер
-j - адрес jabber-сервера и его порт
-p - пароль
ЗЫЖ: Если у кого бедет проблема с русской кодировкой попробуйте открыть файл sendxmpp, найти строки
use Net::XMPP;и сразу после них добавить строку
use Getopt::Long;
use strict;
use encoding 'koi8-r';или
use encoding 'utf-8';
Возможно поможет. Я не пробовал, т.к. у меня с русскими в Gajim'е все хорошо, кроме темы сообщения, а тут они мне и не нужны.
8 коммент.:
спасибо
Пользуйтесь на здоровье :)
Настроил, все работает. Только с каких пор крон умеет работать с секундами(цитата:"чтобы каждые 5 сек. выполнялся")? недочет.
Можно и недочетом назвать, хотя это я так, образно выразился. Когда писал этот пост, даже не задумывался над примерами, просто хотел показать примеры применения.
Спасибо за замечание, взял в кавычки.
ЗЫЖ Хотя можно и "костыль" сделать: засунуть в крон проверку каждую минуту, запущен ли скрипт, и если нет, запускать, а в скрипте в бесконечный цикл завернуть проверку со "sleep 5s" =) Хотя лучше будет демон сделать свой :)
Для своих скриптов я как раз и делаю бесконечный цикл, только на PHP. Как в данном случае бесонечный цикл сделать на баше?
Очень просто :)
while true ; do
# что-то полезное
sleep 1s
done
В этом примере бесконечный цикл, в котором итерации будут повторяться каждую секунду (sleep 1s). НЕ рекомендую убирать слипы из бесконечных циклов.
Ну насчет слипов это конечно же понятно.
Тогда уж буду разбираться до конца. Собственно насколько сложно превратить этот скрипт в демон, чтоб было start|stop?
Да собственно там ничего сложного нету. Пишешь скрипт-демон (можешь глянуть /etc/init.d/skeleton как пример и основу), который будет каждые 5 сек. проверять то что надо и, в случае чего, отправлять мессагу тебе :)
Отправить комментарий