Van egy szkriptem, ami hol az elvárt módon működik, hol nem (többnyire nem).
Nagyjából így néz ki:
mkdir=/bin/mkdir
tempsubmappa=`$mktemp -d`
probix=1
while [[ $probix -le 4 ]]; do
echo "$$: parancs: $mkdir $tempsubmappa/$probix" >> $dojoblog
$mkdir "$tempsubmappa/$probix"
# Itt pár perces kódolási munka van, közben a cron a szkript
# egy másik példányát is elindítja, de az észreveszi
# hogy nincs egyedül, és kilép (csak az első példány
# fut tovább)
let "probix = $probix + 1"
done
echo "$$: Parancs: $mkdir $tempsubmappa/sub" >> $$dojoblog
$mkdir "$tempsubmappa/sub"
Most bekukkantottam a $dojoblog logfájlba, és érdekes dolgot találtam, ez van benne:
8873: parancs: /bin/mkdir /tmp/tmp.PLePKZ8907/1
8873: parancs: /bin/mkdir /tmp/tmp.PLePKZ8907/2
8873: parancs: /bin/mkdir /tmp/tmp.PLePKZ8907/3
8873: parancs: /bin/mkdir /tmp/tmp.PLePKZ8907/4
8873: parancs: /tmp/tmp.PLePKZ8907/sub
Azaz, úgy tűnik, hogy a ciklus belsejében még benne volt a $mkdir változóban a "/bin/mkdir" érték, a ciklus után meg a változó üres volt, ezért a /tmp/tmp.PLePKZ8907/sub mappa nem lett létrehozva, és a szkript "dugába dőlt".
Hogy lehet az, hogy a $mkdir változó, ami a szkript elején értéket kapott, egyszer csak kiürült?
Lehet ez összefüggésben azzal, hogy a szkript futása közben a cron a szkript egy másik példányát is indította (de az magától kilépett, mert egyszerre csak egy példányban futhat)?
Mintha azt venném észre, hogy akkor nincs gond, ha a szkript elég gyorsan lefut ahhoz, hogy időközben nem indul második példánya (azaz a kódolási munka elég hamar lefut).
De miért csak a $mkdir változót érinti ez a probléma? A szkript más változói látszólag "sose ürülnek ki"!
Tudtok valami magyarázatot erre?