Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Skripa za proveru i pokretanje servera pod Screen + crontab

  • 17 odgovora
  • 5.045 pregleda

Najnovija ↓

Skripa za proveru i pokretanje servera pod Screen + crontab 20.10.2012. u 04:12 · pre 171 mesec #1
Kada scripta ide bez screen opcije sve radi kako treba,

#!/bin/bash
# check SERVER
ps -ef | grep -v grep | grep SERVER.jar
# if not found - equals to 1, start it
if [ $? -eq 1 ]
# only if ,,screen -dmS SERVER -t SERVER,,
then
java -jar SERVER.jar
else
echo "eq 0 - SERVER found - do nothing"
fi


ali kad je sa screenom onda nece.

#!/bin/bash
# check SERVER
ps -ef | grep -v grep | grep SERVER.jar
# if not found - equals to 1, start it
if [ $? -eq 1 ]
# only if ,,screen -dmS SERVER -t SERVER,,
then
screen -d -m SERVER -c java -jar SERVER.jar
else
echo "eq 0 - SERVER found - do nothing"
fi


Pretpostavljam da to ne moze bas tako kako sam ja zamislio :) pa me interesuje da li imate neki predlog? Cron pokrece skriptu -> skripta proverava da li je proces SERVER.jar ziv -> ako nije, skripta pokrece SERVER.jar ali sa screen opcijom po imenu SERVER.
Tj. hocu da se prvo attachuje screen koji je vec rucno pokrenut sa "screen -dmS SERVER -t SERVER", a zatim da pokrene SERVER.jar

U crontab sam stavio ovo ispod, tako da bi on pokretao skriptu svakih 5min.
Code:

00 * * * * user ./script.sh
05 * * * * user ./script.sh
10 * * * * user ./script.sh
15 * * * * user ./script.sh
20 * * * * user ./script.sh
25 * * * * user ./script.sh
30 * * * * user ./script.sh
35 * * * * user ./script.sh
40 * * * * user ./script.sh
45 * * * * user ./script.sh
50 * * * * user ./script.sh
55 * * * * user ./script.sh




Potpis
- Il n'est pas important qui, importe c'est quoi!
Re: Skripa za proveru i pokretanje servera pod Screen + crontab 20.10.2012. u 09:38 · pre 171 mesec #2
prvo, ovaj crontab ti je uzasan. stavi liniju
Code:
*/5 * * * * user skript

umjesto one gomile sto si stavio.

sto se tice screen-a ne mogu sad da provjerim, ali probaj da navedes punu putanju do java binary...
Potpis
Beneath civilization's fragile crust, cold chaos churns...
Re: Skripa za proveru i pokretanje servera pod Screen + crontab 20.10.2012. u 18:32 · pre 171 mesec #3
Hahha, znao sam da postoji jednostavniji nacin za taj 5min cronjob, ono je bilo suvise rogobatno... :D


Sto se tice putanje java fajla ona nije potrebna, jer radi tako kako jeste u prvom slucaju bez screen-a.
Potpis
- Il n'est pas important qui, importe c'est quoi!
Re: Skripa za proveru i pokretanje servera pod Screen + crontab 20.10.2012. u 19:47 · pre 171 mesec #4
^^
Što ne znači da radi i kad se pokrene preko screen-a. Poslušaj čoveka kad ti priča i probaj (imao sam slučaj da radi iz shell-a a neće iz cron-a npr, i problem je bio baš putanja...)
Potpis
Kad sve ostalo zakaže, pročitaj uputstvo...
Re: Skripa za proveru i pokretanje servera pod Screen + crontab 21.10.2012. u 02:20 · pre 171 mesec #7
Mislim da ima nekoliko grešaka u ovom delu:

screen -d -m SERVER -c java -jar SERVER.jar


Verzije screen-a koje koristim imaju sledeće tumačenje switcha -c :
Citat:

-c file
override the default configuration file from "$HOME/.screenrc" to file.


dalje, ispred onog SERVER bi trebalo da stoji -S ( jer je to ime sesije koje želiš da postaviš ) - ovako kako je trenutno, pretpostavljam da se na trenutak napravi screen, koji pokuša da izvrši komandu "SERVER -c java -jar SERVER.jar" koja odmah failuje jer ovo "SERVER" očito nije ime nikakvog programa itd.

Dakle, ispravna verzija bi trebalo da bude:

screen -d -m -S SERVER java -jar SERVER.jar
ili u toku testiranja nešto poput:

screen -d -m -S SERVER /bin/bash -c "java -jar SERVER.jar &>/tmp/srv.log"


( da ne bude zabune, ne savetujem čuvanje logova u /tmp/ naravno ;) )
Potpis
Attempt all the problems. Those you can do, don't do. Do the ones you cannot.
Re: Skripa za proveru i pokretanje servera pod Screen + crontab 21.10.2012. u 04:35 · pre 171 mesec #8
To -c ne bi trebalo tu da bude, ostavio sam ga greskom mozda.
Za ovo drugo se nismo razumeli, jer je screen vec kreiran sa dmS flagovima rucno. Naveo sam u prvoj poruci to.
Potpis
- Il n'est pas important qui, importe c'est quoi!
Re: Skripa za proveru i pokretanje servera pod Screen + crontab 21.10.2012. u 14:32 · pre 171 mesec
izmenjeno 1 put, poslednji put uranium 21.10.2012. u 14:50
  1. uranium21.10.2012. u 14:50zapis iz teksta poruke
#9
Koliko vidim, problematična ti je bila ova skripta:


#!/bin/bash
# check SERVER
ps -ef | grep -v grep | grep SERVER.jar
# if not found - equals to 1, start it
if [ $? -eq 1 ]
# only if ,,screen -dmS SERVER -t SERVER,,
then
screen -d -m SERVER -c java -jar SERVER.jar
else
echo "eq 0 - SERVER found - do nothing"
fi


i koliko vidim, ukoliko se ne nađe proces koji u komandi/argumentima ima SERVER.jar, onda se pokušava izvršavanje:

screen -d -m SERVER -c java -jar SERVER.jar
a to objasnih zašto je pogrešno :)

Ono što je malo problematično je što pokušavaš da se prvo atačuješ na ručno pokrenut screen ( za to svakako ne možeš da koristiš -d -m ).
Mislim da bi bilo lakše da taj ručno pokrenut screen startuješ u detach modu, tako da čim se okonča proces koji pod njim pokrećeš, da se i on sam zatvori, i onda ona skripta samo napravi novu istoimenu sesiju.
Potpis
Attempt all the problems. Those you can do, don't do. Do the ones you cannot.
Re: Skripa za proveru i pokretanje servera pod Screen + crontab 22.10.2012. u 05:34 · pre 171 mesec #10
Da, u pravu si, paste-ovao sam pogresan fajl gde za screen ne treba da bude -d -m, vec -r kako bi se attachovao na vec kreiran screen.

Nego, palo mi na pamet da u samom crontabu attachujem screen i pokrenem skriptu, kad vec nece iz scripte da attacuje screen...
Code:
*/5 * * * * /usr/bin/screen -r SERVER /home/username/SERVER.sh


Ili da pisem jos jednu skripticu, koja ce da pokrene screen, pa ovu prvu...? :D
...a uvek mi ostaje krajnja opcija da ako ne bude hteo da se reattachuje na postojeci screen, kreira novi sa -dmS SERVERxyz. :/ Probacu par tih varijanti posle podne, ako budem imao vremena i pristup serveru.
Potpis
- Il n'est pas important qui, importe c'est quoi!
Re: Skripa za proveru i pokretanje servera pod Screen + crontab 22.10.2012. u 19:39 · pre 171 mesec #11
Sto se tice onoga sto sam hteo u crontab-u:

Ovo ne radi, nece da se re-attachuje na vec postojeci.
Code:
*/5 * * * * screen -r SERVERscn ./script.sh


Dok ovo radi, jer napravi novi screen... ALI...
Code:
*/5 * * * * screen -dms SERVERscn ./script.sh
...ne prikazuje text na ekranu, vec je screen crn ali funkcionalan i prima komande.



Sto se tice skripte:

Ovo isto ne radi, jer nece re-attach.

#!/bin/bash
# check SERVER
ps -ef | grep -v grep | grep SERVER.jar
# if not found - equals to 1, start it
if [ $? -eq 1 ]
then
screen -r SERVERscn java -jar SERVER.jar
else
echo "eq 0 - SERVER found - do nothing"
fi


Dok, ovo radi, jer napravi novi screen... ALI...

#!/bin/bash
# check SERVER
ps -ef | grep -v grep | grep SERVER.jar
# if not found - equals to 1, start it
if [ $? -eq 1 ]
then
screen -dmS SERVERscn java -jar SERVER.jar
else
echo "eq 0 - SERVER found - do nothing"
fi
...sve normalno radi i prikazuje text na ekranu (za razliku od tog istog uradjenog preko cron-a).


Zakljucak, i dalje ne znam kako da, preko crona i scripte, re-attachujem na vec kreiran screen i zatim pokrenem skriptu u tom screenu. :)



@Tyler Durden
Poslusao sam coveka, i isto se ponasa kad upisem full path i bez njega, ali cu imati u vidu da i to moze biti problem nekad. Thx. :)

Potpis
- Il n'est pas important qui, importe c'est quoi!
Re: Skripa za proveru i pokretanje servera pod Screen + crontab 23.10.2012. u 22:16 · pre 171 mesec #12
E sad, posto sam jos-malo-pa odustao od varijante da se reattachujem na vec kreiran screen (a vidim da ni vi nesto nisi zainteresovani previse za problem :D ), odlucio sam da probam kako ce ici sa iznova pozivanim screenom svaki put... i dosao do nekih novih informacija. :)

Kada radim ovako (pokrecem screen iz crontaba):
Code:
*/5 * * * * screen -dmS SERVERscn ./script.sh
java -jar SERVER.jar &>/home/username/SERVER.log

U tom slucaju se desava ono sto sam naveo u prethodnoj poruci da se attachovanjem na taj screen sa screen -r SERVERscn "...ne prikazuje text na ekranu, vec je screen crn ali funkcionalan i prima komande." I sve informacije normalno loguje u /home/username/SERVER.log



A kada radim ovako (pokrecem screen iz skripte):
Code:
*/5 * * * * ./script.sh
screen -dmS SERVERscn java -jar SERVER.jar &>/home/username/SERVER.log

Onda se, attachovanjem na taj screen sa screen -r SERVERscn text prikazuje na ekranu (i komande su funkcionalne naravno), ALI nista se ne loguje u /home/username/SERVER.log - fajl je prazan.

Sto nagovestava zasto se nista ne prikazuje na ekranu u prvom slucaju i zasto ne loguje nista u durgom slucaju, ali ono sto mene sad interesuje je ZASTO je to tako? :)
Tj. iz kog razloga je ili/ili varijanta? Kako da namestim da ispisuje na ekranu i loguje?


Potpis
- Il n'est pas important qui, importe c'est quoi!
Re: Skripa za proveru i pokretanje servera pod Screen + crontab 23.10.2012. u 22:37 · pre 171 mesec #13
Možeš da isprobaš tee program.
java -jar SERVER.jar 2>&1 | tee /home/username/SERVER.log


Problem koji imaš sa redirekcijom je u tome što kad smestiš redirekciju u skriptu, onda se ona odnosi na komande koje joj prethode,
a kad radiš bez skripte, redirekcija se odnosi na komandu screen koja igrom slučaja nema potrebe da ispiše ništa ni na stderr ni na stdout ( možeš da testiraš ovu hipotezu tako što namerno napraviš neku grešku u sintaksi screen naredbe - poruku o grešci bi trebalo da nađeš u SERVER.log ).
Potpis
Attempt all the problems. Those you can do, don't do. Do the ones you cannot.
Re: Skripa za proveru i pokretanje servera pod Screen + crontab 24.10.2012. u 02:36 · pre 171 mesec
izmenjeno 1 put, poslednji put mr. ako 24.10.2012. u 03:01
  1. mr. ako24.10.2012. u 03:01zapis iz teksta poruke
#14
Sa tee programom je nesto drugacije...
Kad screen pokrenem iz crontab, radi kako treba - i ispisuje na ekranu i loguje, a kad ga pokrenem iz scripte, onda radi kao i ranije, nece da loguje...
Tako da, screen cu pokretati iz crontab-a, a tebi hvala na ideji za tee. :)

Sto se tice testiranja, kada napravim namernu gresku pri pokretanju screena (recimo pogresan argumnet -zzz) cak i iz scripte, onda to upise log... ali tada nije ni pokrenuo server jer je greska bila jos kod screen naredbe... ali da, hipoteza je ispravna kao sto si i rekao.


EDIT: bitna izmena na pocetku poruke
Potpis
- Il n'est pas important qui, importe c'est quoi!
Re: Skripa za proveru i pokretanje servera pod Screen + crontab 24.10.2012. u 04:01 · pre 171 mesec #15
Sad tek shvatih da sam onaj tvoj drugi po redu pristup pogrešno oslovio kao da je bez skripte, a zapravo, mislio sam samo na to da li screen kao komandu izvršava skriptu ili prosto shell komandu sa argumentima ...

Možeš da isprobaš i sledeće:


*/5 * * * * screen -dmS SERVERscn ./script.sh

screen -dmS SERVERscn <( java -jar SERVER.jar &>/home/username/SERVER.log )


Poslednjih godina sam prestao da koristim screen za ovakve stvari ...
Dobre alternative su:

1.
nohup komanda &> neki.log

2.
( komanda <&- &> neki.log & ) &


A log uvek možeš da pratiš sa
tail -f neki.log


Potpis
Attempt all the problems. Those you can do, don't do. Do the ones you cannot.
Re: Skripa za proveru i pokretanje servera pod Screen + crontab 24.10.2012. u 04:49 · pre 171 mesec #16
Nisam sigran sta postizem sa ovim sto predlazes da testiram kao ni sta onim 2. predlogom.
Sto se tice screen-a meni on odlicno zavrsava posao, ali evo u ovom slucaju ne ide tacno kako sam zamislio, vec moram da pravim workaround i kompromise... Nohup mi ne odgovara nikako, a tail koristim gde ima potrebe i smisla.


E da, zaboravio sam da pitam u vezi ovoga
&>/home/username/SERVER.log
i
2>&1 | tee /home/username/SERVER.log
kako bih mogao da namestim da svaki put kreira novi fajl po moguctsvu sa datumom na taj dan kada je kreiran?
Vidim da tee ima argument -a kojim nastavlja postojeci fajl, no da li postoji nacin za kreiranje novog fajla svaki put?
Potpis
- Il n'est pas important qui, importe c'est quoi!
Re: Skripa za proveru i pokretanje servera pod Screen + crontab 24.10.2012. u 10:34 · pre 171 mesec #17
Ono prvo samo demonstrira kako se može pravilno grupisati redirekcija tako da se odnosi na komandu a ne na sam screen ( bez pravljenja skripte ).

Za datum možeš da probaš nešto poput:

&>/home/username/SERVER.$( date +%F ).log

2>&1 | tee /home/username/SERVER.$( date +%F ).log
Potpis
Attempt all the problems. Those you can do, don't do. Do the ones you cannot.
Sviđa mi se1
Re: Skripa za proveru i pokretanje servera pod Screen + crontab 25.10.2012. u 18:22 · pre 171 mesec #18
Odlicno, to je ono sto mi je trebalo. :) Dodao sam u scriptu ovako da bi bilo preciznije i filename-friendly na Win. :)

2>&1 | tee /home/username/logfilename-$( date +%F-%H-%M-%S ).log




Potpis
- Il n'est pas important qui, importe c'est quoi!
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme