Moin, ist PC-Programmierung die richtige Kategorie für RaspberryPies mit Debian? Ansonsten bitte ich um Entschludigung und Verschiebung. Ich habe eine PiCAM und ein Skript im Hintergrund, was ständig ein Standbild als JPG aufnimmt und es in den Ordner des Webservers speichert. Bedingt durch die relativ geringe Uploadgeschwindigkeit passiert es sehr häufig, dass während der Webserver das Bild überträgt es vom Skript schon wieder neu aufgenommen wird und die Daten überschrieben werden. In welcher Richtung muss ich suchen, um so ein Problem zu verhindern? Kann ich dem Webserver beibringen, dass er sich eine temporäre Kopie von den zu sendenden Daten anlegt, damit diese nicht zerstört werden können? Wie sieht das ganze aus, wenn mehrere Benutzer auf dieselbe Datei zugreifen? Mir fehlt irgendwie eine Richtung in der ich eine Lösung finden kann. Danke.
Das Uploadskript sollte die Datei unter anderem Namen speichern und erst nach erfolgtem (langsamen) Upload umbenennen.
Stichwort Semaphore. Der Zugriff wird vom Webserver gesperrt, wenn er lesen will und gibt den zugriff wieder frei, wenn er das Bild gelesen hat. Ebenso macht es dein Skript. Beide müssen aber gegenseitig prüfen, ob nicht gerade die jeweils andere Software auf das Bild zugreift.
Bevor "aufwendig" synchronisiert wird, einfach umbenennen (wie schon oben geschrieben). (1) Der Writer erzeugt eine temporäre Datei und, wenn fertig geschrieben, nennt sie in die Zieldatei um. (2) Der Reader wartet auf die Existenz der Zieldatei, benennt sie um wenn verfügbar, und löscht sie, wenn fertig. Auf Schritt (2) kann man verzichten wenn der Reader die Zieldatei für jeden Zyklus nur einmal öffnet (die überschriebene/gelöschte Datei besteht weiterhin, solange der Handle offen ist) und es auch kein Problem ist die gleiche Datei mehrfach zu übertragen (wenn der Reader schneller als der Writer ist).
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.