Автор Тема: Monitoring на процес  (Прочетена 4884 пъти)

abadon

  • Напреднали
  • *****
  • Публикации: 510
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
    • WWW
Monitoring на процес
« -: Jun 30, 2008, 17:14 »
Здравейте.

Някой може ли да ми даде идея или софтуер как се прави следното нещо. Имам един сървър на който върви един java базиран уеб сайт обаче чат пад през неопределен период от време поради някаква причина java-та крашва или зависва и съответно сайта спира да работи. И като забележа, че сайта е спрял и влизам на машината рънвам скрипта който стартира сайта и нещата се оправят. Ама както се сещате това е доста досадна работа, тъй като постоянно трябва да го наблюдавам и т.н. А някой път всичко си работи по 20-30 дена без проблем а някой път крашва за 1-2 дена..... Странно че няма и никакви логове за нещо нередно на машината....
Мисля че с един скрипт който да се рънва от cron-а на един час и да проверява ако има процес java скрипта да умира ако няма такъв процес да рънва скрипта за старт...... Предполагам че това се прави лесно на bash ама нещо не мога да се справя сам '<img'>

На теория са ми ясни нещата "ps -A | grep java" ако се върне резултат спри ако не се върне резултат exec скрипта.....Ама на практика не мога да го напиша '<img'>

Предварително благодаря на всички които ще ми помогнат.



Активен

Успешното Boot-ване на Windows завършва с рестарт!!!
You are registered as user #382190 with the Linux Counter
Всеки пост - отговор на въпрос

zeridon

  • Killmode enabled
  • Administrator
  • Напреднали
  • *****
  • Публикации: 1398
  • Distribution: Debian/Ubuntu
  • Window Manager: console/Gnome
  • BOfH
    • Профил
    • WWW
Monitoring на процес
« Отговор #1 -: Jun 30, 2008, 17:18 »
Силно препоръчвам monit http://www.tildeslash.com/monit/

На мен поне ми върши прекрасна работа. Може да се настройва много подробно да проверява за какво ли не, да имаш различни правила в зависимост от време, натоварване и какво ли още не
Активен

Внмимавай имам клещи за кабел
http://www.netsecad.com/
http://theregister.co.uk/odds/bofh/

Йордан

  • Напреднали
  • *****
  • Публикации: 1451
  • Distribution: Ubuntu / Gentoo
  • Window Manager: Gnome
  • не е важно колко ти е голяма пишката, а какво можеш с нея
    • Профил
    • WWW
Monitoring на процес
« Отговор #2 -: Jun 30, 2008, 23:03 »
nagios+snmp
Активен

Всеки пост - отговор на въпрос !!!

Йордан Георгиев
http://ygeorgiev.net/

ANTIADMIN

  • Напреднали
  • *****
  • Публикации: 660
  • Distribution: Windows XP Pro latest updates
  • ANTIADMIN
    • Профил
Monitoring на процес
« Отговор #3 -: Jun 30, 2008, 23:57 »
nagios не е ли за много по-големи работи '<img'>
Все едно да сложиш СОТ на бостана/не знам как се пише тази дума/.
Активен

teleport

  • Напреднали
  • *****
  • Публикации: 134
    • Профил
Monitoring на процес
« Отговор #4 -: Jul 01, 2008, 01:21 »
Примерен код
#!/bin/bash

pid="`/sbin/pidof $1`"

if [ -n "$pid" ]; then
        echo "$1 is running"
else
        echo "$1 is NOT running"
fi


Изпълняваш примерно така:

$ check firefox
firefox is NOT running
$ check firefox-bin
firefox-bin is running
Активен

abadon

  • Напреднали
  • *****
  • Публикации: 510
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
    • WWW
Monitoring на процес
« Отговор #5 -: Jul 01, 2008, 09:46 »
За моменнта ще се възползвам от съвета на teleport и ще се опитам да си направя скрипт който да ползва неговия и когато той ми върне "NOT running" да стартира скрипта за старт на сайта.....

За monit не бях чувал изглежда доста добро решение, което ще разгледам за в бъдеще но ми се вижда сложничко за конфигуриране поне в началото. Сигурно защото нямам опит с него.

nagios+snmp си мислех, но това е супер сложно за конфигураре иначе е супер ама за една такава задачка да се мъча с него ми се вижда глупаво....
Активен

Успешното Boot-ване на Windows завършва с рестарт!!!
You are registered as user #382190 with the Linux Counter
Всеки пост - отговор на въпрос

teleport

  • Напреднали
  • *****
  • Публикации: 134
    • Профил
Monitoring на процес
« Отговор #6 -: Jul 01, 2008, 10:15 »
Не е необходим нов скрипт. Ето ти реално работещ вариант, който следи named ( centos/redhat/fedora платформа ).

Записшваш скрипта примерно като /root/check.

Примерен код
#!/bin/bash

pid="`/sbin/pidof $1`"

if [ -n "$pid" ]; then
       echo "$1 is running"
else
       echo "$1 is NOT running"
       /sbin/service $1 restart
fi


# chmod u+x /root/check

Добавяш в cron-а на root:

*/30 * * * * /root/check named

Така на всеки 30 минути ще се проверява наличието на процес с име named и ако го няма ще се рестартира. Това обаче няма да ти помогне ако процеса увисне, т.е. има го в паметта но все пак не работи.



Активен

trip

  • Напреднали
  • *****
  • Публикации: 70
  • Distribution: FreeBSD
  • Window Manager: GNOME
    • Профил
Monitoring на процес
« Отговор #7 -: Jul 01, 2008, 10:37 »
По добре се научи да програмираш

Пример 1:

#!/bin/sh
 
if [ "` ps xa|grep apache2| grep -v grep|wc -l| awk '{print $1}' `"  = "0" ] ;then

/usr/sbin/apache2ctl start

else echo "httpd is running"

fi



Този ред ps xa|grep apache2| grep -v grep|wc -l| awk '{print $1}' брои процесите ако са 0 пуска апача ако не казва че е пуснат Но има един недостатък ако е забил апача пак ти казва че е пуснат

Пример 2:

#!/bin/sh

lynx=/usr/local/bin/lynx
actl=/usr/local/apache/bin/apachectl

ntry=1
while [ "$ntry" -lt "5" ]; do
    $lynx -dump localhost/server-status > /dev/null 2> /dev/null && break

    echo "Apache server is not responding! Restarting...($ntry)"
    ktry=1
    while [ $ktry -lt 5 ]; do
        ($actl stop ; sleep 10; $actl stop) | grep "not running" > /dev/null 2> /dev/null && break;
        echo "Stop failed...($ktry)"
        sleep 5
        ktry=$((ktry + 1))
    done
    $actl start
    ntry=$((ntry + 1))
    sleep 20
done


Оставам те сам да разгадаеш тези редове '<img'> Последния скрипт е според пътищата във фреебсд но и за линукс са малки разликити '<img'>
Активен

Lenovo ThinkPad R61i : Fedora 12 GNOME

zeridon

  • Killmode enabled
  • Administrator
  • Напреднали
  • *****
  • Публикации: 1398
  • Distribution: Debian/Ubuntu
  • Window Manager: console/Gnome
  • BOfH
    • Профил
    • WWW
Monitoring на процес
« Отговор #8 -: Jul 01, 2008, 10:57 »
Подобрение на скрипта ... вместо магийките със ps, awk и grep може да се ползва pgrep.

Ако е достатъчно нова версията може дори pgrep -c
Активен

Внмимавай имам клещи за кабел
http://www.netsecad.com/
http://theregister.co.uk/odds/bofh/

Nikolavp

  • Напреднали
  • *****
  • Публикации: 408
    • Профил
    • WWW
Monitoring на процес
« Отговор #9 -: Jul 01, 2008, 12:03 »
Добре защо просто не ползваш inittab с една директива за respawn ?'<img'>. Не е много културно решение, но поне се знае, че работи както трябва.

EDIT: Ето ти още малко по темата(човека явно предпочита monit  ':ok:'  ':ok:' ): http://lists.apple.com/archives/unix-porting/2003/Sep/msg00013.html



Активен

http://blog-nikolavp.rhcloud.com - простотиите, с които се занимавам в свободното време

Gaara

  • Напреднали
  • *****
  • Публикации: 631
  • Distribution: Debian
  • Window Manager: E17
    • Профил
Monitoring на процес
« Отговор #10 -: Jul 01, 2008, 13:58 »
С две ръце за монит '<img'>. Предполагам, че ползваш tomcat. Редактирай  /etc/monit.conf като добавяш собствен път (навик ми е), който да сочи към директорията, в която ще се съдържа конфига на процеса, който ще следиш (в моят случай е tomcat).
Примерен код

[root@c46 mnt]# egrep -v "^#" /etc/monit.conf
set daemon  120
set httpd port 2812 and
    use address localhost
    allow localhost           # from localhost only
    allow admin:password      # allow only admin_user:password

include /root/monit/*
[root@c46 mnt]#


След това, създаваш конфигурационният файл на процеса, който искаш да следиш, където искаш да седи (горе съм дефинирал, че ще е в /root/monit)

Примерен код

[root@c46 mnt]# egrep "^\s"  /root/monit/tomcat.monitrc
    check process tomcat with pidfile /var/run/tomcat.pid
        start program = "/etc/init.d/tomcat start"
        stop program  = "/etc/init.d/tomcat stop"
        if cpu > 60% for 2 cycles then alert
        if cpu > 80% for 5 cycles then restart
        if totalmem > 81 MB then restart
        if children > 250 then restart
        if failed host 127.0.0.1 port 80 protocol http
                and request "/"
                then restart
        if failed host 127.0.0.1 port 443
                then restart
        if 3 restarts within 5 cycles then timeout
        group tomcat
[root@c46 mnt]#


Трябва да го пипнеш спрямо твоята машина '<img'>

Успех и всичко най-свежо от мен.



Активен

Last night, Darth Vader came down from planet Vulcan and told me that if you don't install Debian, he'd melt your brain.

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Monitoring на процес
« Отговор #11 -: Jul 01, 2008, 15:43 »
Няма ли да е най-добре вместо това да се разбере каква е причината са зависването? Примерно логовете от tomcat-а или какъвто и да е там application server-а не казват ли нещо по въпроса?
Активен

"Knowledge is power" - France is Bacon

abadon

  • Напреднали
  • *****
  • Публикации: 510
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
    • WWW
Monitoring на процес
« Отговор #12 -: Jul 02, 2008, 09:57 »
Цитат (trip @ Юли 01 2008,10:37)
По добре се научи да програмираш

Пример 1:

#!/bin/sh
 
if [ "` ps xa|grep apache2| grep -v grep|wc -l| awk '{print $1}' `"  = "0" ] ;then

/usr/sbin/apache2ctl start

else echo "httpd is running"

fi



Този ред ps xa|grep apache2| grep -v grep|wc -l| awk '{print $1}' брои процесите ако са 0 пуска апача ако не казва че е пуснат Но има един недостатък ако е забил апача пак ти казва че е пуснат

Пример 2:

#!/bin/sh

lynx=/usr/local/bin/lynx
actl=/usr/local/apache/bin/apachectl

ntry=1
while [ "$ntry" -lt "5" ]; do
    $lynx -dump localhost/server-status > /dev/null 2> /dev/null && break

    echo "Apache server is not responding! Restarting...($ntry)"
    ktry=1
    while [ $ktry -lt 5 ]; do
        ($actl stop ; sleep 10; $actl stop) | grep "not running" > /dev/null 2> /dev/null && break;
        echo "Stop failed...($ktry)"
        sleep 5
        ktry=$((ktry + 1))
    done
    $actl start
    ntry=$((ntry + 1))
    sleep 20
done


Оставам те сам да разгадаеш тези редове '<img'> Последния скрипт е според пътищата във фреебсд но и за линукс са малки разликити '<img'>

Благодаря. Този първия скрипт ми свърши чудесна работа. А иначе сериозно се замислям да се науча да програмирам ама все не остава време '<img'>
Активен

Успешното Boot-ване на Windows завършва с рестарт!!!
You are registered as user #382190 with the Linux Counter
Всеки пост - отговор на въпрос

abadon

  • Напреднали
  • *****
  • Публикации: 510
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
    • WWW
Monitoring на процес
« Отговор #13 -: Jul 02, 2008, 13:11 »
Цитат (Gaara @ Юли 01 2008,13:58)
С две ръце за монит '<img'>. Предполагам, че ползваш tomcat. Редактирай  /etc/monit.conf като добавяш собствен път (навик ми е), който да сочи към директорията, в която ще се съдържа конфига на процеса, който ще следиш (в моят случай е tomcat).
Примерен код

[root@c46 mnt]# egrep -v "^#" /etc/monit.conf

set httpd port 2812 and
    use address localhost
    allow localhost           # from localhost only
    allow admin:password      # allow only admin_user:password

include /root/monit/*
[root@c46 mnt]#


След това, създаваш конфигурационният файл на процеса, който искаш да следиш, където искаш да седи (горе съм дефинирал, че ще е в /root/monit)

Примерен код

[root@c46 mnt]# egrep "^\s"  /root/monit/tomcat.monitrc
    check process tomcat with pidfile /var/run/tomcat.pid
        start program = "/etc/init.d/tomcat start"
        stop program  = "/etc/init.d/tomcat stop"
        if cpu > 60% for 2 cycles then alert
        if cpu > 80% for 5 cycles then restart
        if totalmem > 81 MB then restart
        if children > 250 then restart
        if failed host 127.0.0.1 port 80 protocol http
                and request "/"
                then restart
        if failed host 127.0.0.1 port 443
                then restart
        if 3 restarts within 5 cycles then timeout
        group tomcat
[root@c46 mnt]#


Трябва да го пипнеш спрямо твоята машина '<img'>

Успех и всичко най-свежо от мен.

Да точно томкат ползвам.... Благодаря за подробното описание когато имам време ще го пробвам ама сега ми трябваше някакво бързо решение, тъй като нямам никакво свободно време, тъй като другата седмица ще се явявам за CCSI и CCNP сертификати.....
Активен

Успешното Boot-ване на Windows завършва с рестарт!!!
You are registered as user #382190 with the Linux Counter
Всеки пост - отговор на въпрос

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Monitoring на процес
« Отговор #14 -: Jul 02, 2008, 13:48 »
http://cr.yp.to/daemontools.html ?
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
hardware monitoring
Настройка на програми
demoniac 9 3312 Последна публикация May 11, 2004, 09:54
от
User monitoring
Идеи и мнения
mrowcp 10 3641 Последна публикация Dec 16, 2006, 17:07
от michail
Network monitoring
Настройки на софтуер
anakinn 9 4093 Последна публикация Apr 26, 2007, 22:09
от ktodorov
CCTV DVR с web monitoring/management, работещи под Линукс?
Идеи и мнения
bager 6 3453 Последна публикация Jun 03, 2011, 17:13
от savago
Programa za monitoring
Кошче
scorpions 2 2001 Последна публикация Feb 17, 2012, 23:16
от plamen_f