1 script ?2 peldany? 1 kimenet.
Erdekes problemaba botlottam tegnap.
Van egy phpben irt cron script, amit orankent futtatunk, de elofordulhat, hogy nagyon ritkan nem fejezodik be 1 ora alatt, es mivel egesz huzos sql query-k vannak benne (pontosabban maga a lekerdezes egyszeru, csak sok a sor) ezert ha 2 peldanyban fut, akkor eleg jol meg tudja fogni az adatbaziszervert.
ezert azt talaltam ki, hogy mikor elindul a scriptem, megnezi, hogy letezik-e egy bizonyos fajl, ha igen, akkor exit-tel kilep, ha nem letezik, akkor letrehozza, majd ha befejezodik a script (register_shutdown_function), akkor letorli.
Ez elmeletben szep es jo, de gyakorlatban a kovetkezot vettem eszre:
Ha elinditom a scriptet, majd nyomok egy frissitest, akkor szepen exitel, mivel fut mar egy peldany ("ignore_user_abort Off").
viszont ha elinditom egy tabban a sciptet, majd nyitok egy uj tabot, es ott is elinditom, akkor nem lep ki.
addig debugoltam, mig rajottem a problemara:
ha van egy nyitott kapcsolatom az adott url-re akkor ha nyitok megegyet, akkor a 2. peldany is ugyanazt a kimenetet kapja meg mint az elso.
Tehat nem fut le ket peldanyban a script, hanem mind2 ablakban ugyanazt a kimenetet latom (teszteleshez aktualis datumokat echoztam, es hiaba inditottam 10 sec elteressel, ugyanazt a scriptet, ugyanazokat a datumokat irta ki, valamint maga a cron script is hibat kellett volna hogy dobjon, unique key megsertese miatt, mikor egyszerre futott, de nem tette.)
a cron script szempontjabol ez nem problema, de kivancsi lennek, hogy ezt mi okozza, vagy hol lehetne ennek utanaolvasni.
Google-t probaltam, de valahogy nem tudom, hogy mik lennenek a megfelelo kulcsszavak ehhez a problemahoz.
Nekem gyanus, hogy ez valami apache beallitas/feature.
Ha valaki meg tudna dobni egy linkkel, akkor azt nagyon megkoszonnem.
<?php
error_reporting(E_ALL ^ E_NOTICE);
ini_set('display_errors', 1);
$lockfile = getcwd().'/locked';
$datefile = getcwd().'/'.date('Y-m-d H:i:s');
clearstatcache();
touch($datefile );
if (is_file($lockfile)) {
echo '<pre>'; print_r('letezik'); echo '</pre>';
die();
} else {
register_shutdown_function('shutdown');
echo '<pre>'; print_r('nem letezik'); echo '</pre>';
touch($lockfile);
chmod($lockfile, 0777 );
}
echo '<pre>'; print_r(date('Y-m-d H:i:s')); echo '</pre>';
sleep(19);
echo '<pre>'; print_r(date('Y-m-d H:i:s')); echo '</pre>';
function shutdown(){
global $lockfile;
echo '<pre>'; print_r($lockfile); echo '</pre>';
unlink($lockfile);
die();
}
?>
Tyrael
- Tovább (1 script ?2 peldany? 1 kimenet.)
- 864 megtekintés