Большой Воронежский Форум
» UNIX и дериваты>Как вы следите за своим mdadm (soft-raid)?
Hip-Hop 23:29 14.04.2011
Есть программный рейд 6. Хочу мониторить его через sms и дублировать по почте. Как? Пока я склоняюсь к простому скрипту на python используя библиотеку gammu-python + питонову smtplib + встроенный мониторинг mdadm - mdadm monitor (для мониторинга и генерации события).

то-есть, скрипт будет оповещать беря информацию от mdadm monitor и слать её по sms и почте.

Слать sms используя библиотеку python легко:

import gammu

sm = gammu.StateMachine()
sm.ReadConfig()
sm.Init()

message = {
'Text': 'python-gammu testing message',
'SMSC': {'Location': 1},
'Number': '+420800123465',
}

sm.SendSMS(message) [Ответ]
Hip-Hop 15:09 17.04.2011
Вот, чтобы использовать почту gmail я использую такой простой скрипт на py:

Код:
#!/usr/bin/python
import sys
import smtplib

#Edit the following variables 
smtpserver = 'smtp.gmail.com' # SMTP server
username = ''  # for SMTP AUTH, set SMTP username here
password = ''  # for SMTP AUTH, set SMTP password here
sender = ''
to = ''
#to = ['[email protected]', '[email protected]'] # For multiple addresses
# Setup email
subject = 'RAID5 array status changed!!!'
event = sys.argv[1] #Provided by mdadm
mddevice = sys.argv[2] #Provided by mdadm
text = "MD Device: " + mddevice + "\nEvent: " + event
headers = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (sender, to, subject)
message = headers + text

#Send the email
session = smtplib.SMTP(smtpserver)
session.ehlo()
session.starttls()
session.ehlo()
session.login(username, password)
session.sendmail(sender, to, message)
session.quit()
далее я добавляю в /etc/default/mdadm параметр в options:

--program /path-to-prog/script.py

и /etc/init.d/mdadm restart

имеем ps aux:

root 14045 0.0 0.0 2400 500 ? Ss 00:21 0:00 /sbin/mdadm --monitor --scan --pid-file /var/run/mdadm/monitor.pid --daemonise --syslog --program /path-to-prog/script.py

вот этот скрипт http://www.phaerus.com/?p=5 , но с gmail он работать не будет в части sendmail.

можно ещё добавить status_file = open("/proc/mdstat"); status = status_file.read() # Включить в письмо вывод из proc по статистке\состоянию рейда.

ps Все это имеет смысл если вы не имеете своего smtp-сервера.

Далее.. я использую gammu и модем e1550. Нужно установить пакет usb-modeswitch и переткнуть модем.

Создать файлик ~/.gammurc

[gammu]
port=/dev/ttyUSB0
connection=at
name=huawei e1550
model=

и дописать в скрипт импорт модуля gammu и отправку sms. В самом простом варианте.

pss надо установить и gammu-python (aptitude search gammu) [Ответ]
Hip-Hop 20:01 19.04.2011
Что будет если кулер на вашем процессоре отвалится или перестанет работать? Возможен перегрев и выход из строя.

Как этого избежать? Очень просто:


#!/bin/bash

limittmp=38
t=`/usr/bin/sensors | awk '/Core/ {print substr($3,2,2)}' | head -n 1`
if (("$t" > "$limittmp"))
then
echo "Тревога"
fi

Можно запуска в cron или оформить как даемон. Аналогичную операцию можно провести и с hddtemp. [Ответ]
Hip-Hop 21:14 19.04.2011
Хорошо, но теперь нам надо передать это письмо по почте. У нас нет своего smtp-сервера, но есть аккаунт на gmail

Давайте использую возможность mutt - http://www.mutt.org/doc/devel/manual.html#smtp

И получим в этого:

#!/bin/bash

limittmp=38
t=`/usr/bin/sensors | awk '/Core/ {print substr($3,2,2)}' | head -n 1`
if (("$t" > "$limittmp"))
then
echo "Тревога" | mutt [email protected] -s "Температура ядра процессора"
fi

в файле ~/.muttrc минимум нужно иметь:

set smtp_url = "smtp://[email protected]:587/"
set smtp_pass = "user pass" [Ответ]
Hip-Hop 19:39 21.04.2011
Хорошо, можно использовать cron, но можно и обойтись без него. Как? Очень просто.

timelim=30
limittmp=38
t=`/usr/bin/sensors | awk '/Core/ {print substr($3,2,2)}' | head -n 1`
if [ "$1" == "-d" -o "$1" == "--daemon" ]
then

while : ; do
if (("$t" > "$limittmp"))
then
echo "Тревога! Перегрев процессора. Аварийное выключение через 5 секунд" | mutt [email protected] -s "Температура ядра процессора"
sleep 5
shutdown -h now
fi
sleep $timelim
done
fi

Мы вводим в конструкцию бесконечный цикл и таймер. Если вы запускаете скрипт с ключом -d или --daemon, то скрипт работает в цикле. [Ответ]
Hip-Hop 00:46 22.04.2011
Ну, это только пример. Я думаю всем понято, что парадигма linux и любой unix обладает необозримыми масштабами в плане системного администрирования. Нам остаётся только привести этот скрипт к шаблону даемона (штатными средствами системы) И оно будет работать в фоне выполнять свою задачу и мы будем иметь возможность управлять им.

'к шаблону даемона'

Вызывать этот скрипт средствами известных функций:

start\stop. [Ответ]
Hip-Hop 20:22 22.04.2011
Хорошо, теперь давайте поработаем с hddtemp. Программа которая показывает температуру жёстких дисков.

#!/bin/bash

hdd=/dev/sd[a-e]
limittmp=30
timelim=30
message=""
if [ "$1" == "-d" -o "$1" == "--daemon" ]
then
while : ; do
for a in $hdd
do
t=$(hddtemp -n $a)

if (("$t" > "$limittmp"))

then
message=${message}"Тревога! Перегрелся $a\\n"

fi
done
if [ -n "$message" ]
then echo "$message" | tr '\\n' '\012' | mutt [email protected] -s "Температура hdd"
fi

sleep $timelim
done
fi

Тут чуть-чуть сложней. У нас несколько дисков и перегреться может любой из них. Циклом for мы перебираем эти диск и сравниваем их температуры. Переменная message - пустая ячейка памяти изначально, но принимает значение в случаи превышения лимита температуры. Если ячейка (переменная) имеет непустое значение (инициализирована), то отправляем письмо по почте. [Ответ]
Hip-Hop 00:05 24.04.2011
Ну, и простой пример запуска этого скрипта через start-stop-daemon:

#!/bin/sh


daemon=/sbin/hddtempmonitor.sh
name=hddtempmonitor


case "$1" in
start)
echo "Starting $name"
start-stop-daemon --start --quiet -m -b --pidfile /var/run/$name.pid \
--exec $daemon \
-- --daemon
;;
stop)
echo "Stopping $name"
start-stop-daemon --stop --quiet --pidfile /var/run/$name.pid
;;
esac [Ответ]
Вверх