frank1993
Goto Top

Variable aus Datei lesen ohne Datenverlust

Hallo Leute,
ich habe ein Problem beim einlesen einer Variable aus einer Datei. Ich finde keinen Lösungsweg, deswegen wende ich mich mal an euch.

Und zwar möchte ich ein screen Log (welches ja das stdout eines screen-Terminals beinhaltet) in eine Variable lesen.
Das geht soweit auch nur, wenn ich das Log eingelesen habe, muss ich es danach löschen weil ich die Daten nicht noch einmal verarbeiten will.

Jedoch kommt es gelegentlich dazu, dass das Log gelöscht wird, wärend noch geschrieben wird.
Mein Script kann dann damit nichts anfangen da die Daten unvollständig sind.

Nun, wie kann ich dies verhindern?

Der Code, der das Log einliest:
input=$(cat screenlog.0) > /dev/null 2>&1
> screenlog.0

        if [ -z "$input" ]  
                then
                echo "nix drinnen"  

                else
                echo "$input"  
fi

Dieser befindet sich in einer Schleife. Wird also ständig wiederholt. Die echo´s sind nur zum testen da :D

Content-ID: 284120

Url: https://administrator.de/contentid/284120

Ausgedruckt am: 19.11.2024 um 19:11 Uhr

122990
Lösung 122990 29.09.2015 aktualisiert um 13:38:40 Uhr
Goto Top
Mit lsof in einer Schleife prüfen ob das File im Zugriff ist:
http://askubuntu.com/questions/14252/how-in-a-script-can-i-determine-if ...

Gruß grexit
Frank1993
Frank1993 29.09.2015 um 13:38:37 Uhr
Goto Top
Bist mein Held! Danke face-smile
Frank1993
Frank1993 29.09.2015 um 18:09:03 Uhr
Goto Top
Das war es doch nicht. Komme grade aus der Uni und hab es probiert.

lsof -r 1 /home/server/screenlog.0
gibt mir immer:
zurück.

Egal ob screen geöffnet oder geschlossen.
Verzweifel langsam :/
122990
122990 29.09.2015 aktualisiert um 18:18:32 Uhr
Goto Top
Zitat von @Frank1993:
Egal ob screen geöffnet oder geschlossen.
Verzweifel langsam :/
So stands ja auch nicht im Link also nochmal richtig lesen ....
Frank1993
Frank1993 29.09.2015 um 18:37:21 Uhr
Goto Top
Ich habe es jetzt einmal so übernommen.

while true
do
if ! [[ `lsof -c screen | grep screenlog.0` ]]
then
echo "ok"
break
fi
echo "nochmal"
sleep 0.5
done

Er erkennt nicht das dort grade noch geschrieben wird. Er gibt immer "ok" aus.
Meine Datensätze sind manchmal immer noch unvollständig.