Pull to refresh

Comments 25

1) У вас скрипт на перле, а в кроне питон
2)
>в bash нету возможности сравнивать десятичные числа

$ if [ 30 \> 20 ]; then echo 'ok';fi
ok
$ if [ 10 \> 20 ]; then echo 'ok';fi
$

3) Зачем еще раз получать нагрузку для отсылки в письме, ежели она у вас и так уже есть.
Гм. Десятичные же, да.
$ if [ 19.9 \> 20 ]; then echo 'ok';fi
$
$ if [ 20.1 \> 20 ]; then echo 'ok';fi
ok
1. Заработался, поправил.

2. Эм, хорошо, но переписывать скрипт на данный момент не вижу смысла.

3. Об этом я написал в топике.

Я хотел использовать значение переменной load в переменной exec, вместо того что бы перепечатывать всю команду, но к сожалению у меня так и не получилось это сделать из за недостаточных знаний языка Perl.
Для таких вещей есть monit и god. Зачем делать лисапед?
Своё родней :) Может быть кому нибудь пригодится, пусть будет.
3)
`echo $load | mail -s 'High load [SERVERNAME]' admins\@example.com"`;


2) Что там переписывать?
#!/bin/bash
MAX_LOAD=20.0
LOAD=`uptime | grep -o 'load average.*' | grep -v grep | cut -c 15-18`
if [ $LOAD \> $MAX_LOAD ]; then
echo $LOAD | mail -s 'High load [SERVERNAME]' admins@example.com
2) протестировал, работает, спасибо, добавил к топику.

3) Тестирую, пока не очень успешно.
Я там fi в конце забыл.
Полезно. Только поправьте в статье:
таким образом команда полная команда
пока целиком все не читал, но могу точно вам сказать:
«grep -v grep» нужен только при разборе вывода «ps».
Еще дополнение: необязательно вызывать дополнительную утилиту uptime, чтобы достать load average. Изучайте дерево /proc, узнаете много нового :)
Кроме того, вы дергаете load за 1 минуту, это не совсем верно, такие пики вполне допустимы, лучше берите за 5 минут, это второе значение.

cat /proc/loadavg | cut -c6-9
или
awk '{print $2}' /proc/loadavg
Спасибо за идею. Понятно что одно и тоже значение можно получить разными способами. Ничего плохо в том что бы вызывать uptime я не вижу. Я показал идею, а вы уже развивайте как Вам угодно :)
я к тому, что нет необходимости выполнять лишние действия, просто оптимизация :)
Ну да… Ваш вариант по элегантней будет)
не знаю, как у вас, а у меня выхлоп uptime состоит из 10 блоков, не 12.
это все к тому же вопросу, что не стоит полагаться на высокоуровневые утилиты.
Я пока Nagios не увидел, тоже извращался в свое время…
как интересно вы используете grep + сut из перла
потому, что вы решили написать на перле, а не на баше, с тем же успехом вы могли написать

#!/usr/bin/perl
`/bin/bash /home/screatch/alert.sh;
UFO just landed and posted this here
можно для красоты сделать так:

#!/bin/bash
MAX_LOAD=20.0
ADMIN="admins@example.com"
LOAD=`awk '{print $2}' /proc/loadavg`
if [ $LOAD \> $MAX_LOAD ]; then
cat <<EOF >/tmp/hl.html
To: $ADMIN
Subject: High load alert
Content-Type: text/html; charset="koi8-r"
<html>
<body>
<h1>Host:Allert!  $(hostname) , date $(date)</h1>
<h2>High load  $(hostname)</h2>
<p><font size="2" color="black" face="Arial"> Винмание возрасла нагрузка на $(hostname)</font>
<p><font size="2" color="black" face="Arial"> Загрузка системы составляет $LOAD</font></p>
<p><font size="7" color="red" face="Arial"> Срочно принять меры</font></p>
</body>
</html>
EOF
sendmail $ADMIN < /tmp/hl.html 
else
echo "all goooooooooood"
fi

Sign up to leave a comment.

Articles

Change theme settings