PDA

View Full Version : Newcs Check Script



siemens
18-03-10, 13:31
Nu ma ajuta nimeni cu un newcs check script?

De curand am probleme, tot la cam 2-3 zile crapa si am nevoie de ceva script care sa-l monitorizeze si sa-i dau restart in momentul cand nu-l vede activ.

Am cautat pe google dar nimic concret. Macar sa incercam noi aici ceva...

danutz68
18-03-10, 13:49
Salut,
Nu am lucrat cu newcs dar poti sa iti dau niste ideii:

Creezi un script newcs_ck.sh si ii il faci executabil : chmod +x

Scriptul poate arata cam asa :



#! /bin/sh
if ps | grep -v grep | grep -c newcs >/dev/null
then
echo "NEWCS is OK"
else
echo "Restarting NEWCS"
/var/bin/newcs
fi


Scriptul apoi il bagi in crontab sa ruleze la 5 minute.
Scriptul e super simplu dar poate fi considerat punct de plecare.

ibiza
18-03-10, 13:56
Am facut un script care merge ok.
Trebuie doar sa modifici primele doua linii in functie de locatia si versiunea newcs-ului.



NEWCS_PATH=/usr/bin
NEWCS_BIN=newcs_1.67
NEWCS_PID=`ps -ef|grep $NEWCS_BIN|grep -v grep|wc -l`

start_newcs () {
$NEWCS_PATH/$NEWCS_BIN
}

stop_newcs () {
killall $NEWCS_BIN 2>/dev/null
sleep 2
}

check_newcs () {
if [ $NEWCS_PID -eq 0 ]; then
echo "`date '+%D %T'` - NewCS is down!"
echo "`date '+%D %T'` - Starting NewCS ..."
start_newcs
echo "`date '+%D %T'` - NewCS started!"
fi
}

case "$1" in
start)
echo "Start NewCS..."
start_newcs
;;
stop)
echo "Stop NewCS..."
stop_newcs
;;
check)
check_newcs
;;
*)
echo "Usage newcs.sh [start|stop|check]"
exit 0
;;
esac

exit 0


Il poti pune in crontab la 5 minute:


*/5 * * * * /path_to_newcs/check_newcs.sh check > /dev/null 2>&1

siemens
18-03-10, 18:50
Multumesc baieti, o sa-l testez indata ce ajung acasa si o sa va comunic cum sta treaba.

siemens
22-03-10, 22:45
Scriptul merge perfect. Problema e alta. Eu tot timpul editam fisierul cronjob sau crontab din /etc/ care se pare ca nu functioneaza.

Pentru adaugare de cron se scrie din shell ca root


crontab -e

si acolo se adauga! Merge din prima.

proteus
22-03-10, 23:01
E mai sigur sa faci modificarile in /etc/crontab. Trebuie sa repornesti serviciul ca sa incarce noile setari - de ex. cu "service crond restart" (pe anumite Linux-uri poate fi diferita comanda de restart).

Cu "crontab -e" modifici doar crontab-ul pentru utilizatorul curent, iar comenzile vor fi executate sub ID-ul acelui user - implicit si cu permisiunile lui.

A, si mai apare o problema: tastele E si R sunt alaturate, si din viteza risti sa tastezi "crontab -r", care iti va sterge toate setarile din crontab-ul acelui user. Mi s-a intimplat de mai multe ori. Am invatat repede sa tin la indemana o copie de backup a ultimului crontab.

Ambele metode sunt valabile, eu prefer /etc/crontab pentru ca e mai usor de centralizat totul. Si, indiferent de metoda, nu uitati sa faceti backup.

siemens
22-03-10, 23:08
Sa zicem ca treaba cu repornirea serviciul n-am stiut-o. Defapt, am stiut ca trebuie sa fac asta dar n-am stiut cum (comanda) si am dat de fiecare data restart dupa ce-am modificat /etc/crontab dar degeaba. Nici o schimbare.

Pentru mine singura solutie a fost crontab -e .

proteus
22-03-10, 23:15
A, inca ceva: "> /dev/null 2>&1" de mai sus inseamna ca tot output-ul programului va fi aruncat. Pentru depanare se poate inlocui cu ">> /tmp/newcs.log 2>&1" si tot output-ul se va duce in fisierul /tmp/newcs.log (se poate folosi orice nume sau director doriti). Semnul dublu ">>" inseamna ca la fiecare executie a comenzii output-ul se adauga la fisierul existent, spre deosebire de ">", care determina golirea fisierului la executia comenzii, inainte de a incepe sa scrie in el.

Iar "2>&1" inseamna ca iesirea standard de erori (stderr) sa fie redirectionata la iesirea standard (stdout), care in cazul de mai sus este redirectionata la randul ei spre /dev/null (galeata de gunoi a sistemului) sau un alt fisier.

---------- Post added at 22:15 ---------- Previous post was at 22:10 ----------

@siemens: Ciudat, folosesc Linux de multi ani, nu inteleg de ce repornirea serviciului nu preia modificarile din /etc/crontab. Ce Linux folosesti? Directioneaza output-ul spre un alt fisier in loc de /dev/null, vezi daca scrie ceva acolo.

Poate e o problema de permisiuni? Daca aplicatia trebuie executatat ca root, de exemplu, atunci linia trebuie scrisa asa:

*/5 * * * * root /path_to_newcs/check_newcs.sh check > /dev/null 2>&1

siemens
22-03-10, 23:33
Am incercat si cu root si fara root. Folosesc Debian, poate asta explica situatia si probabil ca la ubuntu lucrurile sunt mai simple.

Momentan da, folosesc cu crontab -e si output-ul intr-un fisier si merge doar ca-mi salveaza tot din newcs, ca si cum l-as porni manual. La inceput nu aparea nimic, absolut nimic.

Daca sterg fisierul de output si pun toate cele in /etc/crontab, fisierul newcs...log nu se mai genereaza automat decat daca pun aceeasi comanda prin crontab -e.

Tare ciudat, nu?

ibiza
22-03-10, 23:39
@proteus

Comanda de mai jos:
*/5 * * * * /path_to_newcs/check_newcs.sh check > /dev/null 2>&1
redirecteaza outputul scriptului check_newcs.sh in /dev/null, nu outputul executabilului newcs.
Outputul acestui fisier este inutil in situatia in care acest script este pus in crontab si verificat ca face ceea ce trebuie.

Este chiar indicat sa redirectezi outputului scriptului in /dev/null sa nu-ti umple syslog-ul de garbage.

Daca se doreste redirectarea output-ului dat de newcs intr-un fisier pentru debug ulterior, ar trebui modificata linia din script:
$NEWCS_PATH/$NEWCS_BIN
in
$NEWCS_PATH/$NEWCS_BIN > /tmp/newcs.log 2>&1
sau:
$NEWCS_PATH/$NEWCS_BIN >> /tmp/newcs.log 2>&1

In ceea ce priveste instalarea unei comenzi in crontab, eu recomand (doar) varianta:
crontab -e

proteus
22-03-10, 23:45
Ai dreptate cu output-ul, multumesc pentru corectura, nu citisem atent scriptul.

Despre "crontab -e", de ce il preferi?

ibiza
23-03-10, 00:15
Prefer crontab -e pentru standardizare.
Unix este un sistem multiuser, dar /etc/crontab poate fi editat doar de catre root. Un user obisnuit poate folosi doar crontab -e pentru instalarea unor comenzi in cron.

Daca esti root si folosesti ambele variante de schedulare s-ar putea sa te incurci in viitor.

proteus
23-03-10, 00:31
Inteleg ce spui, dar eu tot zic ca /etc/crontab e mai indicat pentru tot ce tine de sistem. Pentru aplicatii pe care si le pun utilizatorii pentru ei, desigur "crontab -e" e solutia, dar pentru setari facute de root, chiar daca trebuie rulate sub alte UID-uri, eu recomand /etc/crontab.

Anyway, multumesc pentru discutia interesanta.

siemens
23-03-10, 10:02
Se poate cumva ca acest script sa-mi spuna si ora cand a crapat si i-a dat reboot? desigur, intr-un log...

proteus
23-03-10, 11:09
Sigur ca se poate. Cum am explicat mai sus, directioneaza output-ul spre un fisier de log in loc de /dev/null. Daca te uiti in script vezi ca in functia check_newcs() scriptul face exact ce doresti: daca newcs e mort il reporneste si scrie la output data si ora la care l-a repornit.

siemens
23-03-10, 14:08
Si eu unde am gresit daca mie imi apare exact log-ul din newcs si nu date referitoare la "check" sau reporniri?!

proteus
23-03-10, 16:02
Nu ai gresit. Comanda din start_newcs() nu are output-ul lui newcs directionat nicaieri, deci se va duce in output-ul scriptului. Daca nu vrei asta, directioneaza-l in /dev/null:


start_newcs () {
$NEWCS_PATH/$NEWCS_BIN > /dev/null 2>&1
}