Script ausführen, wenn neue Dateien/Ordner in Ordner kommen?

Status
Für weitere Antworten geschlossen.

PsychoHH

Benutzer
Mitglied seit
03. Jul 2013
Beiträge
2.967
Punkte für Reaktionen
4
Punkte
78
Ich dachte gerade du antwortest dir selbst.
frimp, framp, fremp, fromp ;)
 

AndiHeitzer

Benutzer
Sehr erfahren
Mitglied seit
30. Jun 2015
Beiträge
3.341
Punkte für Reaktionen
633
Punkte
174
Nun ja, wenn in dieser eine Minute die Ordner in diesem Ausmaß gelöscht werden soll (wird ganz sicher nicht innerhalb 1 Minute fertig sein, wenn es um 2 TBs geht), wird schon der nächste Befehl aufgerufen und der erkennt natürlich die Veränderungen (da ja grad die Dateien gelöscht werden) und ruft dann die gliechen Zeilen auf und sie löschen dann ... und .. was kommt dann? ERORR ;)

Ich habe das bei mir so gelöst, dass ich zu beginn einer 'Aktion' eine Datei schreibe. Zum Ende der 'Aktion' wird die Datei wieder gelöscht.
Beim nächsten Durchlauf prüfe ich zuerst, ob diese Datei schon/noch vorhanden ist, und nutze einen 'EXIT 0', um den vorhandenen Prozess nicht zu gefährden.
 

framp

Benutzer
Mitglied seit
19. Feb 2016
Beiträge
1.005
Punkte für Reaktionen
129
Punkte
89

TeXniXo

Benutzer
Mitglied seit
07. Mai 2012
Beiträge
4.948
Punkte für Reaktionen
100
Punkte
134
Ich habe das bei mir so gelöst, dass ich zu beginn einer 'Aktion' eine Datei schreibe. Zum Ende der 'Aktion' wird die Datei wieder gelöscht.
Beim nächsten Durchlauf prüfe ich zuerst, ob diese Datei schon/noch vorhanden ist, und nutze einen 'EXIT 0', um den vorhandenen Prozess nicht zu gefährden.

Auch eine effektive Lösung ... Man lernt hier nie aus! :)
 

ruedi66

Benutzer
Mitglied seit
25. Apr 2018
Beiträge
129
Punkte für Reaktionen
29
Punkte
28
Soo effektiv ist es leider nicht, wenn das Script nicht zu Ende läuft, wird auch das Lockfile nicht gelöscht und ein neuer Run ist nicht möglich.
Am besten nehmt ihr den Code unten für das Lockfile. Mit diesem wird das Lockfile auch gelöscht, wenn das Script mit Error 1 etc abbricht oder Ctrl-C gesendet wird.

Rich (BBCode):
#!/bin/bash

LOCKFILE="./LOCKFILE"
if [ -e ${LOCKFILE} ] && kill -0 `cat ${LOCKFILE}`; then
    echo "Läuft bereits, Exit"
    exit
fi
trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT
echo $$ > ${LOCKFILE}

echo "Ab hier dein Code"
sleep 20
 

frimp

Benutzer
Mitglied seit
03. Mrz 2011
Beiträge
225
Punkte für Reaktionen
37
Punkte
34
Kann man das nicht besser mit "flock" machen?
Die if-Abfrage ist leider nicht atomar. Es müsste eigentlich mit "flock" gehen (statt der 100 kann ein anderer file-descriptor ausser 0 bis 3 genommen werden:


Rich (BBCode):
#!/bin/bash
LOCKFILE="./LOCKFILE"
exec 100>${LOCKFILE} || exit 1
flock -n 100 || exit 1
trap "rm -f ${LOCKFILE}; exit" INT TERM EXIT

echo "Ab hier dein Code"
sleep 20

Der trap-Befehl ist nicht unbedingt nötig, er beseitigt nur die "Dateileiche".
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat