Zadejte hledaný výraz...

Jak zajistit, aby v daný okamžik pracoval daný skript pouze jednou?

no a co se stane pokud script spadne a tabulku uz neodlockne ?
20. 12. 2012 16:36:59
https://webtrh.cz/diskuse/jak-zajistit-aby-v-dany-okamzik-pracoval-dany-skript-pouze-jednou/strana/2#reply843982
petrx
verified
rating uzivatele
(8 hodnocení)
20. 12. 2012 16:59:01
Napsal Martin Schlemmer;884665
Přesto jste neodpověděl, co v databázi děláte.
V prvním příspěvku píšete, že potřebujete lock,
Jde hlavně o to, že chci vytvořit univerzální "zarážku" i pro použití v budoucích skriptech, které třeba ani databázi nevyužívají. Požadavek na běh jen jedné instance je docela častý, rád bych na to měl univerzální funkci.
A intuitivně vždy směřuji k nejjednoduššímu řešení, protože u složitějšího se mohou objevit různé zádrhele.
---------- Post added 20.12.2012 at 16:59 ----------
Například:
Napsal mytrix;884670
Ta fce s lock souboru je samozrejme vyhodnejsi. Reseni by Re4DeR ma tu nevyhodu, ze v pripade neocekavaneho konce skriptu, at uz z jakehokoliv duvodu, zustane tabulka zamcena a nova instance skriptu se jiz nepusti. Vseobecne reseni pres db nepovazuju za nejvhodnejsi, pokud to ma resit pouze jednoinstancni spusteni skriptu.
20. 12. 2012 16:59:01
https://webtrh.cz/diskuse/jak-zajistit-aby-v-dany-okamzik-pracoval-dany-skript-pouze-jednou/strana/2#reply843981
vlnk
verified
rating uzivatele
(4 hodnocení)
20. 12. 2012 16:59:42
"spadne" script -> uzavře se connection -> uvolní se všechny db zdroje (včetně zámků)
20. 12. 2012 16:59:42
https://webtrh.cz/diskuse/jak-zajistit-aby-v-dany-okamzik-pracoval-dany-skript-pouze-jednou/strana/2#reply843980
petrx
verified
rating uzivatele
(8 hodnocení)
20. 12. 2012 17:00:41
Napsal Re4DeR;884720
proto je tam ta kontrola podle time() a spusteni natvrdo
A co když se mezitím přenastaví systémový čas, třeba pomocí NTP?
---------- Post added 20.12.2012 at 17:01 ----------
Napsal vlnk;884728
Řízení zdrojů v db je nesrovnatelně efektivnější.
než zamykání souborů v operačním systému?
20. 12. 2012 17:00:41
https://webtrh.cz/diskuse/jak-zajistit-aby-v-dany-okamzik-pracoval-dany-skript-pouze-jednou/strana/2#reply843979
jses si jisty i u mysql ?
obcas nám spadne server prave diky tomu ze jsou tam neuzavrene connection. protoze tam nekde nejak vzniknou.
20. 12. 2012 17:01:58
https://webtrh.cz/diskuse/jak-zajistit-aby-v-dany-okamzik-pracoval-dany-skript-pouze-jednou/strana/2#reply843978
petrx
verified
rating uzivatele
(8 hodnocení)
20. 12. 2012 17:02:09
Napsal vlnk;884795
Dohadovat se o tom přes php čato s jiným strojem jen zbytečně blokuje.
Ten zamykací soubor je přece na lokálním disku
20. 12. 2012 17:02:09
https://webtrh.cz/diskuse/jak-zajistit-aby-v-dany-okamzik-pracoval-dany-skript-pouze-jednou/strana/2#reply843977
Napsal petrx;884832
A co když se mezitím přenastaví systémový čas, třeba pomocí NTP?
tak si toho vsimnu hned, takhle dulezite veci maji samozrejme ruzne kontroly a jakekoliv problemy mi chodi na mail + sms.
20. 12. 2012 17:03:11
https://webtrh.cz/diskuse/jak-zajistit-aby-v-dany-okamzik-pracoval-dany-skript-pouze-jednou/strana/2#reply843976
petrx
verified
rating uzivatele
(8 hodnocení)
20. 12. 2012 17:04:16
Hlavně bych však chtěl poprosit o kontrolu, zda v tomto kusu kódu není chyba (neprogramuji v PHP a napsal jsem to podle dokumentace jednotlivých příkazů a funkcí):
Napsal petrx;884351
$fp = fopen("/tmp/lock.txt", "r+");
while (!(flock($fp, LOCK_EX))):
sleep (1);
endwhile;
(následuje zbytek skriptu)
(soubor asi nezavírat, během činnosti skriptu musí zůstat otevřený a po skončení skriptu se AFAIK zavře sám)
20. 12. 2012 17:04:16
https://webtrh.cz/diskuse/jak-zajistit-aby-v-dany-okamzik-pracoval-dany-skript-pouze-jednou/strana/2#reply843975
vlnk
verified
rating uzivatele
(4 hodnocení)
20. 12. 2012 18:54:06
ad 13:40
Z php volám uloženou proceduru, která udělá vše, co je třeba. V rámci volání si ověří dostupnost prostředků a počká si (klidně maximálně definovanou dobu).
Udělá všechno nebo nic a vrací výsledek.
Výhodou je snad i to, že po dobu zpracování neběží čas php scriptu.
Pokud php scripty běží v prostředí distribuovaného zpracování na více servrech, k lokálnímu disku jiného servru se ani nedostane.
20. 12. 2012 18:54:06
https://webtrh.cz/diskuse/jak-zajistit-aby-v-dany-okamzik-pracoval-dany-skript-pouze-jednou/strana/2#reply843974
petrx
verified
rating uzivatele
(8 hodnocení)
20. 12. 2012 22:54:30
Napsal vlnk;884887
ad 13:40
Z php volám uloženou proceduru, která udělá vše, co je třeba. V rámci volání si ověří dostupnost prostředků a počká si (klidně maximálně definovanou dobu).
Udělá všechno nebo nic a vrací výsledek.
Výhodou je snad i to, že po dobu zpracování neběží čas php scriptu.
Pokud php scripty běží v prostředí distribuovaného zpracování na více servrech, k lokálnímu disku jiného servru se ani nedostane.
To asi nepůjde.
Ve skriptu v PHP se mi občas stává, že pokus o přístup do databáze skončí chybou (na hostingu Savana je povoleno jen max. 5 paralelních spojení do databáze, zatímco skript je v pohodě volán prohlížečem paralelně 6x...)
Jak jsem již napsal, chtěl bych poprosit o kontrolu, zda v tomto kusu kódu není chyba (neprogramuji v PHP a napsal jsem to podle dokumentace jednotlivých příkazů a funkcí):
Napsal petrx;884351
$fp = fopen("/tmp/lock.txt", "r+");
while (!(flock($fp, LOCK_EX))):
sleep (1);
endwhile;
(následuje zbytek skriptu)
(soubor asi nezavírat, během činnosti skriptu musí zůstat otevřený a po skončení skriptu se AFAIK zavře sám)
20. 12. 2012 22:54:30
https://webtrh.cz/diskuse/jak-zajistit-aby-v-dany-okamzik-pracoval-dany-skript-pouze-jednou/strana/2#reply843973
Pro odpověď se přihlašte.
Přihlásit