Opracowuję system, który współpracuje z pakietem wysyłkowym USPS o nazwie Dazzle. Część tego systemu obejmuje demona monitorowania, którego celem jest pobieranie plików wartości rozdzielanych na tabulatory, przekształcanie ich w pliki XML rozpoznawane przez Dazzle i przekazywanie ich do programu Dazzle w celu generowania etykiet. A ta część działa dobrze. Chciałbym jednak również przeanalizować plik wyjściowy wygenerowany przez Dazzle i zaimportować go do bazy danych.W jaki sposób mój demon Linux może wiedzieć, kiedy program Windows przestał pisać plik, do którego uzyskuję dostęp przez SAMBA?
Należy zauważyć, że Dazzle działa w systemie Windows. Mój demon monitorowania jest napisany w Perlu i działa na systemie Linux. Mój system Linux ma katalogi wejściowe i wyjściowe Dazzle montowane za pośrednictwem Samby.
Istnieje mierzalne opóźnienie między momentem rozpoczęcia zapisywania pliku wyjściowego przez Dazzle i czasu jego zakończenia. Chciałbym wiedzieć, jak mogę poczekać, aż Dazzle zakończy zapisywanie pliku wyjściowego? Próbowałem otworzyć plik i zrobić na nim flock($fh, LOCK_SH)
, ale nie przyniosło to żadnego pożytku.
EDIT: Mam pomysł oparty na komentarzu "mobrule" poniżej. Dazzle zapisuje plik wyjściowy w formacie XML. Każda paczka w przesyłce jest zamknięta w tagach, a cały dokument jest zawarty w tagu. Tak więc, jeśli rozpocznę czytanie pliku przed jego ukończeniem, mogę po prostu poczekać na odpowiedni znacznik zamykający, zanim podejmiemy działanie.
Powinienem też wspomnieć o tym, co obecnie robię. Po wykryciu, że wyjściowy plik XML został utworzony, próbuję go parsować. Jeśli to przetwarzanie nie powiedzie się, śpię i spróbuję ponownie. Jeśli to zawiedzie, śpię dwa razy dłużej, a potem spróbuj ponownie i tak dalej. To zadziałało całkiem dobrze w testowaniu z 64-sekundowym limitem czasu.
Dotyczy to tylko sytuacji, gdy funkcja olśnienia blokuje plik za pomocą tego samego mechanizmu blokującego. Jest to mało prawdopodobne i szczególnie mało prawdopodobne, jeśli Dazzle nie jest skryptem Perla. – mob
To dobra uwaga - Dazzle jest aplikacją Windows i nie jest napisany w Perlu. Ponieważ blokady plików w Perlu są tylko "doradcze", to nie zadziała. Szkoda, bo w przeciwnym razie to najlepsze rozwiązanie, jakie słyszałem. –