konto usunięte

Temat: Aplikacja serwerowa działająca nonstop

Witam serdecznie,
Mam serwer oparty na Linuxie i na nim aplikację serwerową (opartą o MONO - napisana w C#).

Ta aplikacja musi pracować 24h na dobę (tzn. zawsze kiedy uruchomiony jest serwer).

Mam w związku z tym takie pytanie, czy wiecie może czy da się zrobić coś takiego ażeby system (Debian) przy uruchamianiu/restarcie automatycznie startował ten mój program (normalnie wywołuję go poprzez:

screen -A -m -d -S `mono /home/aplikacje/a.exe`



Czy wiecie może co zrobić żeby system sprawdzał co jakiś czas czy ten program jest uruchomiony - i jeśli nie, to żeby go automatycznie uruchamiał?


Łukasz
Jakub L.

Jakub L. Programista

Temat: Aplikacja serwerowa działająca nonstop

http://www.goldenline.pl/forum/debian/831478/s/1#18260524
pytałeś się jak to odpalić.
Teraz spamujesz kilka grup jak to podtrzymać:
http://www.goldenline.pl/forum/debian/944376

Tu się pytasz jak zrobić jakieś podstawy z wuwu: http://www.goldenline.pl/forum/php/935670

Skoro jesteś współwłaścicielem firmy, to weź se zatrudnij kogoś komu będziesz płacił za konsultacje.

man crontab
Andrzej Zieliński

Andrzej Zieliński Administrator
Systemów
Informatycznych, Sp.
z.o.o

Temat: Aplikacja serwerowa działająca nonstop

Podstawy Linuxa się kłaniają...

Temat: Aplikacja serwerowa działająca nonstop

Raczej podstawy obsługi internetu
http://www.usethefuckingoogle.com/
Stanisław P.

Stanisław P. Software designer

Temat: Aplikacja serwerowa działająca nonstop

http://mmonit.com/monit/
http://cr.yp.to/daemontools.html

konto usunięte

Temat: Aplikacja serwerowa działająca nonstop

najprościej dopisz to do inittaba czyli jak masz takie linijki w pliku /etc/inittab

c1:1235:respawn:/sbin/agetty 38400 tty1 linux
c2:1235:respawn:/sbin/agetty 38400 tty2 linux
c3:1235:respawn:/sbin/agetty 38400 tty3 linux
c4:1235:respawn:/sbin/agetty 38400 tty4 linux
c5:1235:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux

to gdzies za nimi sobie dopisz

c12:12345:respawn:su - UZYTKOWNIK -c /Sciezka_do_skryptu_programu

opcjonalnie jeszcze mozesz zrobic

c12:12345:respawn:su - UZYTKOWNIK -c /Sciezka_do_skryptu_programu > /dev/tty12

zeby na 12 konsoli podejrzec efekt (lub bledy) polecenia

UZYTKOWNIK - user ktory ma uruchomic program

12345 - runlevele na ktorych ma byc uruchamiany proces

respawn - oznacza ze jak proces sie zakończy to wstanie od nowa

gdybys chcial proces tylko na jedno uruchomienie, zamiast "respawn"
wpisz "once"

mozesz sprobwoac bez "su", powinno zadzialac :
c12:12345:respawn: /Sciezka_do_skryptu_programu

I zgadzam sie z kolegami ... nie masz podstaw :] ... totalnie ....
pomysł z /etc/inittab to najprostrza rzecz :]

Mogłbys tez napisac prosty skrypt w bashu ktory odpalalby twoja aplikacje w petli ... i drugi ktory by sprawdzal czy twoj app. jest w procesach, jaki ma stan, i czy odpowiada ...

Pozdrawiam

konto usunięte

Temat: Aplikacja serwerowa działająca nonstop

Igor Kozłowski:
I zgadzam sie z kolegami ... nie masz podstaw :] ... totalnie ....
pomysł z /etc/inittab to najprostrza rzecz :]

Mogłbys tez napisac prosty skrypt w bashu ktory odpalalby twoja aplikacje w petli ... i drugi ktory by sprawdzal czy twoj app. jest w procesach, jaki ma stan, i czy odpowiada ...

Najprostsza rzecz? A nie wystarczy po prostu dopisać tej linijki z wywołanie do /etc/rc.local? No chyba, że moje subiektywne bądź co bądź poczucie prostoty jest wypaczone (oby nie).

konto usunięte

Temat: Aplikacja serwerowa działająca nonstop

Łukasz Mierzwa:
Igor Kozłowski:
I zgadzam sie z kolegami ... nie masz podstaw :] ... totalnie ....
pomysł z /etc/inittab to najprostrza rzecz :]

Mogłbys tez napisac prosty skrypt w bashu ktory odpalalby twoja aplikacje w petli ... i drugi ktory by sprawdzal czy twoj app. jest w procesach, jaki ma stan, i czy odpowiada ...

Najprostsza rzecz? A nie wystarczy po prostu dopisać tej linijki z wywołanie do /etc/rc.local? No chyba, że moje subiektywne bądź co bądź poczucie prostoty jest wypaczone (oby nie).

tak ale jak program się wysypie/zamknie to sam nie wstanie ...
pozatym używając inittaba mozna przypisac program do konkretnego runlevela :)

w twoim rozwiązaniu moznaby co najwyzej odpalic program w pętli for i wszystko wrzucic na dalszy plan -> &

Temat: Aplikacja serwerowa działająca nonstop

Można też napisać skrypt basha, który będzie odpalał program, czekał aż się wysypie, i znowu odpalał, a to wszystko w pętli. I ten skrypt wrzucić do /etc/rc.local

konto usunięte

Temat: Aplikacja serwerowa działająca nonstop

Paweł Sopel:
Można też napisać skrypt basha, który będzie odpalał program, czekał aż się wysypie, i znowu odpalał, a to wszystko w pętli. I ten skrypt wrzucić do /etc/rc.local

heh pisalem o tym pare postow wyzej ... tylko to jest niebezpieczne gdy program sie powiesi ... musi byc 2 skrypt ktory sprawdza status programu ... i jak jest martwy to wtedy KILL -9 ...

konto usunięte

Temat: Aplikacja serwerowa działająca nonstop

Ew. wykorzystać runit, powinno sobie poradzić nawet z wiszącym procesem.
Druga rozsądna opcja to wspomniany wyżej skrypt weryfikujący działanie i odpalany np. z crona.
Jeśli chodzi o czas reakcji to runit będzie lepszym rozwiązaniem.

konto usunięte

Temat: Aplikacja serwerowa działająca nonstop

taki prosty pseudo skrypcik ... niestety dziala w oparciu o polecenie "ps"
i status procesu ... wiec "pseudo" wykrywacz zwieszonego proga .... ale spokojnie mozna tym tropic procesy typu Zombie :)

Docelowo trzebaby wrzuciw w petle jakiegos klienta tej aplikacji serwerowej .. i jezeli on zobaczy ze niema komunikacji to wtedy kill -9 serwer...

zakladajac ze program jest dopisany do inittaba z opcja "respawn"

#!/bin/bash

dead=SN+ # <- tu wstaw status martwego programu (z polecenia ps axu)

for ((;;)) do
{
result=$(ps -eo stat,comm | grep $1 | awk '{print $1}');
pid=$(ps -eo pid,comm | grep $1 | awk '{print $1}');


if [ ! -z $result ]; then
{
if [ $dead == $result ]; then
{
echo "Program sie zwiesil, likwiduje proces";
echo "Likwiduje porces o id $pid";
kill -9 $pid
sleep 2;
}
else
echo "Program prawdopdobnie dziala";
fi;
}
else
{
echo "Brak procesu";
}
fi;

sleep 1;
};
done


uruchamiamy ./nazwa_skryptu nazwa_procesu_do_monitorowaniaIgor Kozłowski edytował(a) ten post dnia 28.05.09 o godzinie 23:36

konto usunięte

Temat: Aplikacja serwerowa działająca nonstop

Update :)

Jezeli ta aplikacja jest sieciowa i da sie ja "przeskanowac" netcatem to mozemy wtedy sprawdzic czy serwer zyje :)

skrypt uruchamamy :
./nazwa_skryptu nazwa_prcesu_serwera IP PORT interwal_w_sekundach

interwal moze byc w sekundach - 1s, minutach 1m, etc ...

jedynym niebezpieczeństem tego skryptu jest to ze moze otworzyc nam duzo polaczen, trzebaby sprawdzic czy ta nasza "aplikacja serwerowa" zamyka polaczenie odrazu czy idzie w Zombie ...


#!/bin/bash

function usage
{
echo "Uzycie: $0 nazwa_prcesu_serwera IP PORT interwal_w_sekundach"
echo "np. $0 sshd 192.168.0.152 22 20s"
exit;
}

if [ -z $1 ]; then
usage
fi

if [ -z $2 ]; then
usage
fi

if [ -z $3 ]; then
usage
fi

if [ -z $4 ]; then
usage
fi

pid=$(ps -eo pid,comm | grep $1 | awk '{print $1}');

if [ -z $pid ]; then
echo "Blad , niema takiego procesu !"
exit;
fi


for ((;;)) do
{
pid=$(ps -eo pid,comm | grep $1 | awk '{print $1}');

nc -z $2 $3 2>/dev/null

if [ $? -ne 0 ] ; then
{
echo "Program sie zwiesil, likwiduje proces";

if [ ! -z $pid ]; then
kill -9 $pid
sleep 10 # -> czas na respawn serwera
else
echo "Nie moge znalesc programu w procesach";
sleep 5;
fi
}
else
{
echo "Serwer dziala";
}
fi;

sleep $4;
};
done
Igor Kozłowski edytował(a) ten post dnia 28.05.09 o godzinie 23:59

Następna dyskusja:

Aplikacja bazodanowa do obs...




Wyślij zaproszenie do