Zadejte hledaný výraz...
Jakub Glos
Webtrh.cz
Vývoj webových stránek na WordPressu a proklientský přístup pro freelancery
Třídenní infromacemi nabitý prezenční + online kurz v Praze od Webtrhu pouze za 2 871 Kč
Více informací

Opakované spouštění aplikací

Martin Dřímal
verified
rating uzivatele
(4 hodnocení)
22. 11. 2010 23:22:26
Zdravím,
potřeboval bych (na linuxovém serveru) spouštět jisté aplikace pořát dokola.
Jedná se o jeden bash script a 3 PHP scripty. Potřebuji, aby všechny jely současně a to pořád dokola.
Takže tak, že spustím php /var/www/neco/script.php a jakmile script skončí, tak se hned spustí znovu. Řešení bude určitě jednoduché, jen se mi to prostě nedaří najít.
Zkoušel jsem si na to udělat bash script s nekonečnou smyčkou a v ní
php /var/www/neco/script.php
php /var/www/necojineho/druhy.php
bash /script.sh
Problém je v tom, že se to nespouští najednou, ale postupně. Takže spuštění script.sh čeká, než se dokončí oba php. je nějaký způsob, jak to vyřešit?
Samozřejmě jde taky o to, že žádný z těch scriptů se nesmí spustit 2x najednou - vždy může existovat jen jedna instance toho scriptu a po dokončení se spustí znovu.
ps. cron je mi k ničemu..
22. 11. 2010 23:22:26
https://webtrh.cz/diskuse/opakovane-spousteni-aplikaci/#reply586364
hm
verified
rating uzivatele
(20 hodnocení)
22. 11. 2010 23:27:45
proc neotevres script scriptem? tedy nedas smycku primo do php dejme tomu pomoci exec() nebo treba pres curl? spustis to jednou a ono se to bude donekonecna opakovat (jakmile dojde script na konec spusti sam sebe znovu), dokud to nekillnes (takhle jsem to resil ja)
---------- Příspěvek doplněn 22.11.2010 v 23:29 ----------
btw me taky napadlo udelat ty script.sh 2 jeden pro jedno php druhy pro druhe ... (nebude to cekat na oba scripty)
22. 11. 2010 23:27:45
https://webtrh.cz/diskuse/opakovane-spousteni-aplikaci/#reply586363
Martin Dřímal
verified
rating uzivatele
(4 hodnocení)
22. 11. 2010 23:43:30
no jo, ale není to tak, že:
Po prvním průchodu scriptem se to dostane k exec("php /..../zasetensamyscript.php");
tím se spustí další instance PHP s tím stejným scriptem a na jeho konci bude opět exec("php /..../zasetensamyscript.php");
Tím pádem ten první bude čekat na ukončení druhého, druhý na třetí, atd.. A ke konci nikdy nedojde, takže během dne se mi nasbírá několik tisíc instancí PHP, nebo se pletu?
edit:
Pokud je v php něco jako "asynchonní exec", tak by to bylo asi nejlepší.. Jinak při normálním exec to určitě čeká na ukončení toho, co spustím..
edit2:
googlil jsem "php async exec", řešení asi je, ale nejsem si úplně jistý.. Já si to sice přeložím, ale né tak dokonale, abych si byl jistý, že to dělá právě to co chci.. To už je slovíčkaření kolem exec a na to je moje angličtina slabá :(
22. 11. 2010 23:43:30
https://webtrh.cz/diskuse/opakovane-spousteni-aplikaci/#reply586362
hm
verified
rating uzivatele
(20 hodnocení)
22. 11. 2010 23:54:29
mozna by te mohlo zajimat tohle http://www.php.net/manual/en/function.exec.php#86438 coz je reseni toho co popisujes
edit: promin to je ve winech :) unahlena zprava
porad nechapu proc si neudelas dva bashe kazdy pro jedno php, vzdyt to ej prece elegantni reseni :) (tys tam nacpal dva do jednoho, kdyz udelas pro kazdy soubor zvlast nebudou na sebe cekat)
22. 11. 2010 23:54:29
https://webtrh.cz/diskuse/opakovane-spousteni-aplikaci/#reply586361
Martin Dřímal
verified
rating uzivatele
(4 hodnocení)
23. 11. 2010 00:15:22
jo ve winech :)
Jinak ten treti radek bash /script.sh nevola ten script, kde se spousti ty 2 php. To je treti script, ktery se spousti taky :)
ted jsem nasel, ze kdyz je v php vice "provadecich operatoru" (obraceny apstrof), tak se spousti asynchronne. Takze to jdu testnout a dam tam:
echo `php /var/www/blabla`;
echo `uname -a`;
Podle toho, co tam pisou, by to uz po uname nemelo cekat na ukonceni.. Stejne je to prasacke reseni, ale co no.. :)
23. 11. 2010 00:15:22
https://webtrh.cz/diskuse/opakovane-spousteni-aplikaci/#reply586360
hm
verified
rating uzivatele
(20 hodnocení)
23. 11. 2010 00:19:55
no hele ja to resim pres curl, jede to php pak sice pres apache, ale jede a v curl to neceka na doonceni toho scriuptu (respektive tam jde dat timeout, takze se to samo vypne i kdzy ten script jeste bezi) timpadem tam bezi soucasne jen jeden a opakuje se donekonecna :) (idealni je dat do toho scriptu podminku ze kdyz je neco v nejakem souboru, tak se uz znova nespusti, nemusis to pakkillovat ale jen zmenis soubor na ftp a ono se to vypne)
23. 11. 2010 00:19:55
https://webtrh.cz/diskuse/opakovane-spousteni-aplikaci/#reply586359
Martin Dřímal
verified
rating uzivatele
(4 hodnocení)
23. 11. 2010 00:28:07
Jo, udelam to pres curl, dik :) Stejne by me zajimalo to "spravne" reseni, ale takhle to zatim bude stacit a kdyz to funguje, tak to neresim :)
---------- Příspěvek doplněn 24.11.2010 v 15:33 ----------
Nakonec jsem přišel na jednoduché univerzální řešení pro php:
function async_restart () {
exec("php -f {$_SERVER} >> /dev/null &");
}
23. 11. 2010 00:28:07
https://webtrh.cz/diskuse/opakovane-spousteni-aplikaci/#reply586358
James_Scott
verified
rating uzivatele
(7 hodnocení)
6. 2. 2011 20:39:52
A co použít Cron? Ale nevím,jestli to spustí asynchronně.
6. 2. 2011 20:39:52
https://webtrh.cz/diskuse/opakovane-spousteni-aplikaci/#reply586357
Skrivy
verified
rating uzivatele
(1 hodnocení)
6. 2. 2011 23:35:59
Třeba takhle:
while (true); do php /var/www/neco/script.php; done &
while (true); do php /var/www/necojineho/druhy.php; done &
while (true); do bash /script.sh; done &
6. 2. 2011 23:35:59
https://webtrh.cz/diskuse/opakovane-spousteni-aplikaci/#reply586356
Pro odpověď se přihlašte.
Přihlásit