Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

shell script - dateizugriff regeln/steuern

Empfohlene Antworten

Veröffentlicht

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

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

ich benutze bash .... und das ganze nochmal umzuschreiben ist ein bissel .... nunja unangenehm ...

kannst du dein script vllt trotzdem ein wenig erläutern ?

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

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

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

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

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.

also das mit dem pid/remote host mitloggen ist net ganz so einfach:

das eigentliche programm ist ein _sehr_ komplexes perl script, das im debug modus, statusmeldungen raushaut - da kann ich net einfach in den code eingreifen ... ich wüsste garnet wo.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.