Hozzászólások
Segítenétek megkeresni két hibát az egyik scriptemben? A maradék hajam is kitépem, de sehogyan se tudok rájönni a hibák okára. Az a gyanúm, hogy itt két esetben elvi dolgokkal nem vagyok tisztában:
1. probléma:
mv=/bin/mv
...
$mv "sav$dvdsav.sid$sid.srt" "$ogmmappa/"
Nem műxik: a "$mv"-os sorra az alábbi hibaüzit kapom, és a fájl nem lesz áthelyezve:
/usr/local/bin/dvddir2ogm.dojob.sh: line 190: sav1.sid0.srt: command not found
Nagyon úgy tűnik, mintha a $mv változóba nem került volna be a "/bin/mv" érték. De a scriptben számtalan parancs esetében alkalmazom ezt a technikát, miért pont a "mv"-nál van gond vele?
2. probléma:
A script eleje:
sajatpid=$$
...
if [[ -f "$minjobfajl.lock" ]]; then
runningpid=`$cat $minjobfajl.lock`
if [[ -n $runningpid ]]; then
if $ps --no-heading -p $runningpid >/dev/null 2>&1
then
echo "$minjobfajl folyamatban"; exit
fi
fi
fi
echo "$sajatpid" > "$minjobfajl.lock"
# A script itt végzi a tulajdonképpeni feladatát, ha eddig eljut
...
# Majd kilépés előtt kitakarít
$rm "$minjobfajl"; $rm "$minjobfajl.lock"
A fenti scriptet a cron tízpercenként futtatja. A script első dolga ellenőrizni, hogy egy korábban indult példánya fut-e még (ha fut még, akkor a $minjobfajl.lock fájlban ott van annak a pid-je). Ha fut, akkor a jelen scriptnek viszont ki kell lépnie, hogy egy időben ne dolgozzon a script két példánya ugyanazon a feladaton.
Csakhogy néha nem veszi észre, hogy egy korábbi példány még fut, és a két példány rendesen összekavarodik.
Vajon miért? Létezik az, hogy a cron által korábban indított script futás közben pid-et váltott? Vagy a fenti, pid-et eltároló/ellenőrző kódrészletben van a hiba?
Érdekes módon ráadásul a hiba feladatfüggő, azaz, ha a korábban indult script példány tulajdonképpeni feladata video vagy hang kódolás, akkor minden rendben, de ha az feliratot konvertál srt-be, akkor másodjára téveszt a script (de csak másodjára; elsőre még észreveszi, hogy egy korábbi példány még fut).
A script tulajdonképpeni feladatot végző részeit mégse közöltem itt, mert elég hosszúak, és már ezerszer ellenőriztem, hogy azok a lock fájlt és az abban tárolt pid-t nem matatják sehol, azaz a probléma szempontjából abszolút lényegtelennek kellene lenniük.
Mégis, mi lehet a gond?
- A hozzászóláshoz be kell jelentkezni
Igy próbáltad már?
[code:1:0eddab351d]
Futtat="$mv \"sav$dvdsav.sid$sid.srt\" \"$ogmmappa/\""
eval $Futtat
[/code:1:0eddab351d]
- A hozzászóláshoz be kell jelentkezni
Én így szoktam ellenőrizni hogy fut-e már a program...
[code:1:22f6816164]
# fut a program?
[ -f "/var/run/${0##*/}/${0##*/}.pid" ] && echo "${0##*/}: ${StartDate} already running... pid:$(cat "/var/run/${0##*/}/${0##*/}.pid")">>$LogFile && exit 0
# ha nem fut akkor folytatas...
# pid letrehozasa.
echo $$>"/var/run/${0##*/}/${0##*/}.pid"
# stb...
[/code:1:22f6816164]
Ha már fut egy példányban akkor bejegyzés a log-ba és kilép...
- A hozzászóláshoz be kell jelentkezni
[quote:f55f21a366="j_szucs"]Segítenétek megkeresni két hibát az egyik scriptemben? A maradék hajam is kitépem, de sehogyan se tudok rájönni a hibák okára. Az a gyanúm, hogy itt két esetben elvi dolgokkal nem vagyok tisztában:
1. probléma:
mv=/bin/mv
...
$mv "sav$dvdsav.sid$sid.srt" "$ogmmappa/"
Nem műxik: a "$mv"-os sorra az alábbi hibaüzit kapom, és a fájl nem lesz áthelyezve:
/usr/local/bin/dvddir2ogm.dojob.sh: line 190: sav1.sid0.srt: command not found
Nagyon úgy tűnik, mintha a $mv változóba nem került volna be a "/bin/mv" érték. De a scriptben számtalan parancs esetében alkalmazom ezt a technikát, miért pont a "mv"-nál van gond vele?
szvsz próbáld így:
mv="/bin/mv"
...
$mv "sav$dvdsav.sid$sid.srt" "$ogmmappa/"
- A hozzászóláshoz be kell jelentkezni
bash -x shellnek es maris konnyebb :wink:
- A hozzászóláshoz be kell jelentkezni
debuggolni: az első sorba berakod, hogy #/bin/bash -x
ilyenkor kiir neked mindent, hogy mi volt a mv valtozodba stb.
- A hozzászóláshoz be kell jelentkezni