1. leht 1-st

Skript protsessi staatuse kontrolliks ja vajadusel käivitus

Postitatud: 05.03.2014, 14:41
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.

Postitatud: 05.03.2014, 17:07
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

Postitatud: 05.03.2014, 18:50
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.

Postitatud: 05.03.2014, 19:29
Postitas mihkel
Võid ka valmis lahendusi vaadata. Ise kasutan monitit
http://mmonit.com/monit/

Postitatud: 05.03.2014, 19:53
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...

Postitatud: 05.03.2014, 22:31
Postitas obundra
Spott, ära pane skripti nimesse sellesama teenuse nime, mida kontrollida tahad, ta ju protsessidest grepib seda.

Postitatud: 05.03.2014, 22:48
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.

Postitatud: 06.03.2014, 06:40
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 :)