Feledékeny bash?
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?
- Tovább (Feledékeny bash?)
- 1196 megtekintés