Skript protsessi staatuse kontrolliks ja vajadusel käivitus

Linuxi baasil serverite haldamine jms

Moderaator: Moderaatorid

Vasta
Kasutaja avatar
spott
Admin
Admin
Postitusi: 8870
Liitunud: 04.06.2005, 03:00

Skript protsessi staatuse kontrolliks ja vajadusel käivitus

Postitus Postitas spott »

Niih - oskab keegi soovitada mõnda head lahendust või koodi, mida croniga käima lükata, mis kontrolliks ühe protsessi staatust ja kui protsess on peatunud, siis käivitaks selle uuesti. Midagi, mida võiks croni-ga tööle lasta. Lihtsalt teenusele järjest restarte teha ei taha, kuid kui asi on tõesti seisma jäänud, siis teeks automaatselt teenusele taaskäivituse.
Tellige endale sünnipäevaks, sõbrapäevaks või muuks tähtpäevaks kingitus: Kingitused internetist - NetiKink.eu
Kasutaja avatar
imre
Vana Pingviin
Vana Pingviin
Postitusi: 2653
Liitunud: 16.08.2005, 03:00

Postitus Postitas imre »

Kood: Vali kõik

#!/bin/bash
teenus=nimi siia

if (( $(ps -ef | grep -v grep | grep $teenus | wc -l) > 0 ))
then
echo "$teenus töötab!"
else
/etc/init.d/$teenus start
fi
Enne teema püstitamist kasutage OTSINGUT
Küsi targalt: Infot siit!
Kui aru ei saa, siis küsi.
Kasutaja avatar
spott
Admin
Admin
Postitusi: 8870
Liitunud: 04.06.2005, 03:00

Postitus Postitas spott »

Peaaegu töötab. Midagi on IF funktsiooniga nagu näha viga, sest ta teatab mulle kogu aeg, et teenus töötab:
Panin teenuse seisma ja kontrollisin, et tõesti seisab:
root@erp:~# ps -ef | grep -v grep | grep openerp | wc -l
0
käivitasin skripti:
root@erp:~# ./openerptest.sh
openerp töötab!
kuid tegelikult teenus tööle ei läinud ja käivitasin selle käsitsi
root@erp:~# /etc/init.d/openerp start
Starting openerp-server: openerp-server.
Nüüd kontrollisin veel üle, et mis staatuse ta nüüd annab.
root@erp:~# ps -ef | grep -v grep | grep openerp | wc -l
4
root@erp:~#

EDIT: oma ajuga muutsin skripti ja panin lõppu = 0 ja nüüd tuleb järgmine veateade, kuid vähemalt käivitab ;) kuid seda kogu aeg - isegi kui teenus juba töötab:
root@erp:~# ./openerptest.sh
./openerptest.sh: line 4: ((: 2 = 0 : attempted assignment to non-variable (error token is "= 0 ")
Starting openerp-server: openerp-server.
root@erp:~# ps -ef | grep -v grep | grep openerp | wc -l
1
root@erp:~# ./openerptest.sh
./openerptest.sh: line 4: ((: 5 = 0 : attempted assignment to non-variable (error token is "= 0 ")
Starting openerp-server: openerp-server.
root@erp:~#

EDIT2: minuviga - oleks pidanud panema == sinna > asemele. Kuid ikka ta ei saa õigest staatusest aru.
Tellige endale sünnipäevaks, sõbrapäevaks või muuks tähtpäevaks kingitus: Kingitused internetist - NetiKink.eu
Kasutaja avatar
mihkel
Vana Pingviin
Vana Pingviin
Postitusi: 1284
Liitunud: 16.04.2006, 13:08

Postitus Postitas mihkel »

Võid ka valmis lahendusi vaadata. Ise kasutan monitit
http://mmonit.com/monit/
Kasutaja avatar
imre
Vana Pingviin
Vana Pingviin
Postitusi: 2653
Liitunud: 16.08.2005, 03:00

Postitus Postitas imre »

Kood: Vali kõik

imre@fusi:~$ ps aux | grep apache2
imre     22764  0.0  0.0  13752   976 pts/1    S+   19:52   0:00 grep --color=auto apache2
imre@fusi:~$ sudo ./protsess 
apache2 ei tööta - käivitan
 * Starting web server apache2                                                                                                                                                            
 * 
imre@fusi:~$
Minul see töötab küll...
Enne teema püstitamist kasutage OTSINGUT
Küsi targalt: Infot siit!
Kui aru ei saa, siis küsi.
Kasutaja avatar
obundra
Vana Pingviin
Vana Pingviin
Postitusi: 1213
Liitunud: 04.08.2005, 03:00

Postitus Postitas obundra »

Spott, ära pane skripti nimesse sellesama teenuse nime, mida kontrollida tahad, ta ju protsessidest grepib seda.
chris
Pingviini aktivist
Pingviini aktivist
Postitusi: 146
Liitunud: 16.02.2009, 17:39

Postitus Postitas chris »

imre kirjutas:

Kood: Vali kõik

#!/bin/bash
teenus=nimi siia

if (( $(ps -ef | grep -v grep | grep $teenus | wc -l) > 0 ))
then
echo "$teenus töötab!"
else
/etc/init.d/$teenus start
fi
Programm pgrep võimaldab asja natuke lühemalt kirja panna:

Kood: Vali kõik

#!/bin/bash
teenus=protsessi nimi siia

if pgrep "$teenus" > /dev/null; then
    echo "$teenus töötab!"
else
    "/etc/init.d/$teenus" start
    # Tulevikus peab vist kirjutama nii:
    #servicectl "$teenus" start
fi
Pgrep tahab parameetriks protsessi nime ja väljastab kõigi selle nimega protsesside ID-d. Pgrep tagastab nulli, kui protsess(e) leiti ja 1 siis, kui ei leitud.
Kasutaja avatar
spott
Admin
Admin
Postitusi: 8870
Liitunud: 04.06.2005, 03:00

Postitus Postitas spott »

obundra kirjutas:Spott, ära pane skripti nimesse sellesama teenuse nime, mida kontrollida tahad, ta ju protsessidest grepib seda.
:oops: - nii labane viga oligi :)
Tellige endale sünnipäevaks, sõbrapäevaks või muuks tähtpäevaks kingitus: Kingitused internetist - NetiKink.eu
Vasta