Zum Inhalt springen

Samba: Wann Übertragung beendet?


Gelon

Empfohlene Beiträge

Hallo zusammen,

ich habe ein kleines Problem mit Samba:

Ich habe unter Ubuntu 8.04 Server einen Samba-Server eingerichtet, und zwar sollen Benutzer in ein Verzeichnis Dateien kopieren, welche dann automatisiert weiterverarbeitet werden, d.h. das Verzeichniss wird mit iwatch (ein Perl-Programm, welches inotify verwendet) überwacht und bei dem Auftreten der entsprechenden Events werden die Dateien bearbeitet. Jetzt habe ich das Problem, dass Samba, wenn mehrere Dateien auf einmal kopiert werden, zuerst für jede zu übertragende Datei im Ziel-Verzeichnis eine leere Datei anlegt, die dann erst im laufe der Zeit gefüllt wird. Ich darf die Datei aber natürlich erst dann weiterverarbeiten, wenn die Übertragung komplett abgeschlossen ist.

Kann man denn irgendwie überprüfen, ob die vorhandene Datei schon fertig übertragen ist oder ob die Übertragung noch läuft. Da sehr viele Dateien in sehr kurzer Zeit verarbeitet werden müssen kann ich auch nicht bei jeder Datei eine gewisse Zeitspanne warten um zu überprüfen, ob sie noch wächst. Gibt es da andere Möglichkeiten?

Gruß

Gelon

Link zu diesem Kommentar
Auf anderen Seiten teilen

ich habe die problematik im falle einer schnittstelle mal selbst gehabt (ohne inotify) und so gelöst, dass ich zusätzlich zum notify des erstellens der datei eine prüfung auf änderung der dateigröße jeweils alle 30 sekunden gemacht habe. würde die datei nach dem befüllen 30 sekunden nicht mehr berührt, konnte man davon ausgehen, dass sie fertig angelegt (kopiert, übertragen) war.

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke erstmal für deinen Tipp mit F_GETLK. Ich bin jetzt nur nicht der super C-Programmierer ;) , und irgendwie will es nicht so recht klappen. Ich habe mal zum testen folgendes geschrieben:

#include <stdio.h>

#include <fcntl.h>


int main() {

  int fd;

  struct flock sperre;


  fd = open("/tmp/bla.txt", O_CREAT | O_WRONLY);


  fcntl(fd, F_GETLK, &sperre);


  if(sperre.l_type == F_UNLCK)

  {

    printf("Keine Sperre\n");

  }

  else if(sperre.l_type == F_RDLCK)

  {

    printf("Lesesperre\n");

  }

  else if(sperre.l_type == F_WRLCK)

  {

    printf("Schreibsperre\n");

  }


  return 0;

}
Wenn ich das Programm starte, erfolgt aber überhaupt keine Ausgabe??? Die Datei "/tmp/bla.txt" existiert. Ich habe mal versucht, die Datei zu sperren:
#include <stdio.h>

#include <fcntl.h>


int main() {

  int fd;

  struct flock sperre;


  fd = open("/tmp/bla.txt", O_CREAT | O_WRONLY);


  sperre.l_start  = 0;

  sperre.l_whence = SEEK_SET;

  sperre.l_len    = 0;

  sperre.l_type   = F_RDLCK;


  int sperror=fcntl(fd, F_SETLK, &sperre);

  printf("Fehler %d\n", sperror);


  return 0;

}

Wenn ich das Programm aufrufe wird immer "-1" ausgegeben, obwohl die Datei existiert und von keinem anderen Programm genutzt wird.

Könnt ihr mir vielleicht sagen was ich falsch mache, ich blicks irgendwie nicht!

Danke und Gruß

Gelon

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was man da draussen ebenfalls sehr oft sieht ist die Verwendung von lock-Dateien oder irgendwelchen "Signal"-Dateien. Funktionieren tut's so (am Beispiel der Datei xyz.txt):

  1. lock-Datei: zuerst wird die Datei xyz.txt.lock mit leerem Inhalt erstellt, danach die Datei kopiert. Sobald man fertig ist löscht man die .lock
  2. signal-Datei: die Datei wird kopiert und sobald man fertig ist die Datei xyz.txt.done mit leerem Inhalt erstellt.

Sollte klar sein worauf dann Dein Programm/Skript achten muss ob die Übertragung bereits fertig ist.

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...