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-Key: 284120

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

Printed on: April 19, 2024 at 07:04 o'clock

Mitglied: 122990
Solution 122990 Sep 29, 2015 updated at 11:38:40 (UTC)
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
Member: Frank1993
Frank1993 Sep 29, 2015 at 11:38:37 (UTC)
Goto Top
Bist mein Held! Danke face-smile
Member: Frank1993
Frank1993 Sep 29, 2015 at 16:09:03 (UTC)
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 :/
Mitglied: 122990
122990 Sep 29, 2015 updated at 16:18:32 (UTC)
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 ....
Member: Frank1993
Frank1993 Sep 29, 2015 at 16:37:21 (UTC)
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.