Fórum Ubuntu CZ/SK
Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: tululum 01 Února 2009, 18:55:48
-
Dobrý den,
potřeboval bych nějaký script, nebo program, kdterý kontroluje, zda jede aplikace spuštěná přes WINE.
Moje situace je následující:
Pouštím 2 herní servery, které mají serverový program pouze pro Win, takže musím používat WINE :(
Obě aplikace mají název procesu 'wineconsole' a název okna každého serveru je jiný (dejme tomu server1 a server2 - to je nadpis oken)
Potřebuju script, který asi každou minutu zkontroluje, zda obě aplikace jednou, pokud nejede nějaký z nich, execuje nějaký script, kde je postup co má udělat. (script se dejme tomu nachází v /home/user/Plocha/script.sh)
Neví někdo, jak to vyřešit? Server spadne asi 3x denně a když jsem mimo PC celý den (výkend..) tak ho nemůžu nahodit.. :(
Pomůže mi prosím někdo? Zatím mě toto fórum nikdy nezklamalo, snad ani tentokrát ;) :)
-
Mě třeba napadá testovat to skriptem v Cronu, který by obsahoval něco takovýho
#!/bin/bash
nazev_procesu=`pidof nazev_procesu`
if [ $nazev_procesu != "" ]; then
echo "Běží"
else
echo "Neběží"
spustit_skript_blabla
fi
-
Ale nenapadá mě jak vyřešit to, že jsou dva, protože takhle by to fungovalo jen pro jeden. Jedině napsat skript, jako spouštěče pro každý z nich zvlášt, kdy se budou neopakovaně spouštět, prostě cyklus, který ukončí jen uživatel třeba.
-
daji se ty dve aplikace rozlisit ve vypisu "ps -ef" ?
-
Tohle je vypis:
benak 6316 25515 62 15:09 pts/1 03:56:42 srcds.exe -console -game gar #Tady by to melo pokracovat dalsimi 30 spoustecimi prikazy, ty jsou u obou serveru jine)
benak 6321 1 0 15:09 ? 00:02:02 wineconsole --use-event=188
benak 6921 25811 16 20:05 pts/4 00:14:04 srcds.exe -console -game gar
benak 6926 1 0 20:05 ? 00:00:33 wineconsole --use-event=188
benak = user acccount
srcds.exe = exe soubor kterej emuluju pres WINE (SouRCe Dedicated Server)
-
hm, beru to tak, ze nedaji :)
napadla me jeste jedna vec.. co si na to spousteni vyrobit dva skripty. kazdy z nich bude vypadat napr.
touch /tmp/server1.running # vytvorime soubor znamenajici, ze server1 bezi
wine .... # spustim server 1
rm /tmp/server1.running # smazeme soubor, cimz dame najevo, ze server1 uz nebezi
status obou serveru pak muzes testovat podle toho, zda existuji prislusne soubory
-
Jsem celkem mladej (16 let) a programovat umim pouze primerene v Pythonu a Pascalu.
Takze bych prosil jeste malinko vic informaci, napriklad script, ktery bude kontrolovat, zda dany soubor existuje (ten script, co jste postnul chapu a dekuju za nej ;) )
-
no dobre. proste si udelej dve kopie nasledujiciho skriptu a uprav si je podle svych pozadavku
#!/bin/bash
# nastavime display
export DISPLAY=":0.0"
# otestujeme (ne)pritomnost souboru /tmp/server1.running
if ! [ -e /tmp/server1.running ]; then
# server nebezi (soubor neexistuje), spustime jej
touch /tmp/server1.running # vytvorime kontrolni soubor
wine .... # spustime server, tohle si uprav
rm /tmp/server1.running # po ukonceni/spadnuti serveru smazeme kontrolni soubor
fi
jak jsem rekl, ty skripty si udelej dva, pro kazdej server 1 a spoustej je z cronu treba co 5 minut
jinak koukni na vybornej serial o bashi, konkretne 11. dil obsahuje to, co jsem tu psal
http://www.linuxexpres.cz/praxe/bash-11-dil
-
Diky, serial neni moc treba, logiku programování umím a příkazy vychází z angličtiny, takže si je zvládnu logicky odvodit :) ;) Každopádně díky za pomoc!
-
Diky, serial neni moc treba, logiku programování umím a příkazy vychází z angličtiny, takže si je zvládnu logicky odvodit :) ;)
tak to se teda divim, ze sis to sam nenapsal ;)
ne, vazne, neslo mi o vyznam it-then-else, ale o ruzne typy podminek, zpracovavani vystupu apod. V bashi toho jde udelat celkem dost, jenze dokud si ten serial neprectes, tak poradne nepochopis, co mam na mysli (a o co prichazis).
-
Jo, asi si to prectu, ptz nikdy nevim, co budu muset zase jeste udelat ;) takze diky!
Navic jsem ted zjistil, ze to nefunguje.
Moje crontab:
5,10,15,20,25,30,35,40,45,50,55 * * * * /home/benak/Plocha/srvrs/server1.sh
5,10,15,20,25,30,35,40,45,50,55 * * * * /home/benak/Plocha/srvrs/server2.sh
5,10,15,20,25,30,35,40,45,50,55 * * * * /home/benak/Plocha/srvrs/server3.sh
Crontab je OK, kazdych 5 minut pusti scripty, ktere vytvori soubory se slozce tmp ale ty se zase hned samy smazou a servery se nezapnou..
Kdyz script spustim rucne prikazem /home/benak/Plocha/srvrs/server3.sh vse probehne UPLNE OK! (vytvori se soubor, server se spusti, jakmile server vypnu, soubor se smaze)
Proste i CRONe i script zvlast funguji, ale v kombinaci spolu ne.. :(
(btw: nevim jestli se nekde uklada log, takze ho sem nemuzu postanout)
(poznamka: chmod je nastaven OK)
Nevi nekdo prosim cim by to mohlo byt? Ja nejsem tavkovy odbornik abych na to prisel..
-
ted si uvedomuju, ze jsi vlastne psal, ze to spousti okna.. asi bude problem v promenne DISPLAY. Dopln do tech skriptu radek
export DISPLAY=":0.0"
jak jsem to dopsal do toho prispevku nahore.
btw, spousteni co 5 minut se da zapsat jako */5, nemusis tak vypisovat celou tu radu 5,10,15,... (navic v tom svym zapisu mas takhle 10 minut pauzu ;) )
-
jj diky! To sem vedel, ale radsi sem t pro jistotu vypsal ;)
btw: to byl jen ukazkovy zapis, ptz prikazem "crontab -e" se dostanu do editoru, ktery probiha v konzoli, neda se z nej kopirovat, takze jsem to musel cele rucne prepsat a tu nulu jsem tam nejak vypustil.. :) V opravovem cronu tam tu chybu nemam :) Kazdopadne diky za pomoc, nyni vse dokonale funguje ;) Diky!
Btw: vim, ze server sem tam nejen ze proste spadne a vypne se, ale hodi chybu. Vlastne hodi nove okno, kde je jista chyba a tlacitko "OK". Problem je, ze server se nevypne a tudiz se nesmaze soubor a script si bude myslet, ze server bezi, ten je pritom mrtvy s chybovou hlaskou (ktera jakmile se odklepne, aplikace serveru se vypne). Tento problém budu muset ještě vyřešit, ovšem zatím nemám ani název procesu jakým se pojmenuje to okno, takže to zatím nemůžu nijak řešit. :( takže asi brzo tento topic zase oživím.. :( Ale každopádně díky za pomoc!
-
ptal bych se správce oken na název okna které má fokus
-
:D ok, a to znamená? :D V linuxu moc chodit neumím ;) )myslím že si pod tím dokážu něco představit, ale neznám příkaz, takže to nemůžu aplikovat)