Zum Inhalt springen

shell script - dateizugriff regeln/steuern


derJosh

Empfohlene Beiträge

hi

ich habe ein shellscript geschrieben, das die debug ausgaben eines progs. in eine log datei packt.

problem ist nur, wenn von mehreren rechnern das prog aufgerufen wird, ist das schlecht mit der übersicht im log

gibt es eine möglichkeit die logdatei nach dem ersten aufruf zu sperren, so dass nur "einer" reinschreiben kann und andere inputs am besten noch gepuffert, danach reingeschoben werden?

ich hoffe mal, dass das geht

gruss und thx im vorraus

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

du kannst afaik keine Datei exklusiv sperren.

Aber hier ein Vorschlag für KSH.

Am Anfang von deinem Script machst du:

set -C

until >/tmp/mutex.logdateiX

do

sleep 1

done 2>/dev/null

set +C

Und am Ende:

rm /tmp/mutex.logdateiX

So ist zwar die Log-Datei nicht prinzipiell geschützt, aber immerhin ist sie vor Mehrfachaufruf von diesem Script geschützt.

cya

alligator

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

könnte auch mit bash gehen, kanns nur nicht test, da ich keine zur Hand hab.

set -C:

-C Prevent existing files from being overwritten by

the shell's > redirection operator. The >|

redirection operator will override this

noclobber option for an individual file.

until >/tmp/DATEI:

versucht /tmp/DATEI anzulegen, was nur möglich, wenn sie noch nicht existiert, ansonsten

do

sleep 1:

done 2>/dev/null

wartet er eine Sekunde und versucht es wieder bis er die Datei anlegen kann.

set +C:

Dekativiert die Funktion wieder (das musst du nur machen, wenn du in deinem Script noch irgendwelche Dateien mit ">" überschreiben willlst)

rm /tmp/DATEI:

löscht diese "Sperrdatei" und so kann das wiederholt aufgerufene Script sie wieder anlagen und hüpft somit aus der Schleife.

Verstanden?

cya

alligator

Link zu diesem Kommentar
Auf anderen Seiten teilen

problem ist nur, wenn von mehreren rechnern das prog aufgerufen wird, ist das schlecht mit der übersicht im log

gibt es eine möglichkeit die logdatei nach dem ersten aufruf zu sperren, so dass nur "einer" reinschreiben kann und andere inputs am besten noch gepuffert, danach reingeschoben werden?

Eigentlich würde ich den Weg gehen den auch syslog geht, log den Rechner und die PID einfach mit. Für die Übersicht im Logfile hat der liebe (Unix-)Gott grep Erfunden :)

Das ist auf jeden Fall verlässlicher und vermutlich performanter als ein rumhantieren mit N Pufferdateien deren Grösse von 0 bis Unendlich reichen kann.

Oder, wenn das Programm wirklich nur einmal pro Maschine läuft, logge gleich nach ${LOGFILE}.${HOSTNAME}.

Wenn es sich jedoch nicht umgehen lässt sollte jede Instanz einfach in ein eigenes tempfile loggen (man mktemp). Erst wenn das Programm durchgelaufen ist wird der inhalt ins Logfile kopiert. Vorher kann man dann einfach ein Lockfile in /var/lock setzen, das die anderen Instanzen dann Beachten.


LOCKFILE=/var/lock/irgendwas.lck

LOGFILE=/var/log/Programm/my.log

TMPFILE=`mktemp /tmp/$0.XXXXXX` || exit 1

# ...

# Alles da rein schreiben

# ...

# Programm fertig

while [ -f  $LOCKFILE ]

do

   sleep 1

done

touch $LOCKFILE

cat $TMPFILE >> $LOGFILE

rm $TMPFILE

rm $LOCKFILE

exit 0

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

ist ja das selbe in grün, nur dass ich erst checken würde, bevor das ganze Script ausgeführt wird, denn wer weiss was in dem Script für Daten verändert werden, die ein laufendes Script evtl. noch benötigt.

Ausserdem darfst du nicht vergessen ein trap einzubauen, der das Lock-File bei Bedarf löscht, da sonst erstmal unbemerkt x-mal das Script gestarter würden, aber in der Schleife hängen bleiben...

cya

alligator

Link zu diesem Kommentar
Auf anderen Seiten teilen

danke erstmal ... ich werde mir das morgen mal genauer anschaun, hab atm keine zeit ...

noch zur info ... das prog läuft zentral auf einem server und wird auch nur da aufgerufen und der output in EINE logfile geschrieben ...

das programm ist ueber webseite aufrufbar und daher auch von mehreren maschinen gleichzeitig ....

... wie gesagt: morgen schau ich mal was so geht, und ich berichte dann :)

thx und gruss .... Josh

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ausserdem darfst du nicht vergessen ein trap einzubauen, der das Lock-File bei Bedarf löscht, da sonst erstmal unbemerkt x-mal das Script gestarter würden, aber in der Schleife hängen bleiben...

As I said... viel zu kompliziert. Wenn das Script auf genau einer Maschine läuft, PID und REMOTE_HOST mitloggen und sich gut mit grep anfreunden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...