Potrzeba jest prosta: chcesz wiedzieć, gdy na zdalnym serwerze FTP pojawią się nowe pliki, i chcesz z nimi coś zrobić - pobrać, przetworzyć, uruchomić inny przepływ pracy. Problem w tym, że serwery FTP nie wysyłają powiadomień. Po prostu tam są. To Ty musisz pytać.
Są dwa sposoby rozwiązania tego problemu. Pierwszy wymaga Terminala, znajomości pisania skryptów i godzenia się z cichymi awariami. Drugi nie wymaga żadnego z tych.
Trudna droga: skrypty powłoki i cron
Jeśli zapytasz administratora systemu, jak monitorować folder FTP, pierwsza odpowiedź zazwyczaj jest jakąś odmianą lftp - klienta FTP z linii poleceń - w połączeniu z cron jobem lub agentem launchd uruchamiającym go według harmonogramu.
Typowa konfiguracja wygląda tak. Najpierw piszesz skrypt powłoki, który używa lftp do synchronizacji zdalnego folderu z lokalnym:
#!/bin/bash
# pobierz-z-ftp.sh
lftp -u uzytkownik,haslo ftp.example.com << EOF
mirror --only-newer --no-recursion /zdalny/folder /Users/ty/Downloads/ftp-monitor/
quit
EOF
Następnie planujesz uruchomienie co pięć minut za pomocą wpisu cron (crontab -e):
# Synchronizacja FTP co 5 minut
*/5 * * * * /Users/ty/skrypty/pobierz-z-ftp.sh >> /tmp/ftp-sync.log 2>&1
To działa. Jeśli wszystko jest poprawnie skonfigurowane i pozostaje poprawnie skonfigurowane, sprawdza serwer co pięć minut i pobiera wszystko, co nowe.
Ale to podejście ma realne problemy:
- Brak powiadomień. Pliki trafiają do folderu - nie dowiadujesz się o tym, dopóki ręcznie nie sprawdzisz.
- Zawodzi po cichu. Jeśli hasło się zmieni, serwer zostanie przeniesiony lub sieć będzie miała problem, skrypt zawiedzie po cichu. Dowiadujesz się, gdy ktoś pyta, dlaczego pliki nie dotarły.
- Brak interfejsu. Debugowanie wymaga czytania plików logów. Sprawdzenie statusu wymaga uruchamiania poleceń.
- Wymaga konserwacji. Aktualizacje macOS czasem psują konfiguracje cron lub launchd. Dane uwierzytelniające muszą być aktualizowane w plikach skryptów lub plikach z danymi.
- Brak obsługi błędów. Częściowe pobranie lub timeout serwera generuje tylko błąd w logu - jeśli go czytasz.
Dla programisty dobrze czującego się w terminalu i preferującego kod od narzędzi GUI, to może być do zaakceptowania. Dla wszystkich innych - i w przepływach pracy, gdzie liczy się niezawodność i informacja zwrotna - to złe narzędzie.
Łatwa droga: FTPull
FTPull to aplikacja macOS monitorująca zdalne foldery FTP i automatycznie pobierająca nowe pliki. To grafyczny odpowiednik tej samej podstawowej koncepcji - periodycznego odpytywania serwera - ale ze wszystkimi problemami podejścia skryptowego rozwiązanymi.
Aby zacząć monitorować folder FTP:
- Zainstaluj FTPull i otwórz go z folderu Aplikacje. Dodaje ikonę do paska menu.
- Otwórz Ustawienia i dodaj nowe połączenie: nazwa hosta, port, nazwa użytkownika, hasło, protokół (FTP/SFTP/FTPS).
- Ustaw ścieżkę zdalnego folderu - katalog na serwerze, który chcesz obserwować.
- Ustaw lokalny folder - gdzie pobrane pliki mają trafiać na Twoim Macu.
- Ustaw interwał pollingu - jak często FTPull sprawdza serwer. Co 1 minutę dla responsywnego monitorowania; co 5 minut dla mniejszego zużycia sieci.
- Włącz połączenie. FTPull zaczyna odpytywanie natychmiast.
To cała konfiguracja. Od tej chwili FTPull zajmuje się wszystkim automatycznie. Gdy na serwerze pojawi się nowy plik, FTPull wykryje go przy następnym odpytaniu, pobierze i wyśle powiadomienie macOS.
Co FTPull monitoruje
FTPull śledzi stan zdalnego folderu, porównując aktualną listę plików z tym, co widział przy poprzednim odpytaniu. Wszystko, co nowe, zostaje pobrane. Konkretnie:
- Nowe pliki - pliki, których nie było w poprzedniej liście
- Zmodyfikowane pliki (opcjonalnie) - pliki, których rozmiar lub znacznik czasu modyfikacji się zmienił
- Podkatalogi - FTPull może monitorować podkatalogi rekurencyjnie, więc nie potrzebujesz osobnego połączenia dla każdego podfolderu
Filtry rozszerzeń
Jeśli zależy Ci tylko na określonych typach plików - powiedzmy plikach .csv z kanału danych lub plikach .pdf z systemu przetwarzającego - ustaw filtr rozszerzeń. FTPull po cichu pominie wszystko inne. Przydatne, gdy zdalny folder przyjmuje też typy plików, z którymi nie musisz nic robić.
Wiele folderów, wiele serwerów
Jedną z praktycznych zalet nad skryptami powłoki jest zarządzanie wieloma połączeniami. Musisz monitorować pięć różnych serwerów FTP - serwer klienta, serwer wewnętrzny, kanał dostawcy i dwie regionalne odmiany? Dodaj pięć połączeń w FTPull. Wszystkie działają niezależnie z jednej ikony w pasku menu, każde z własnym interwałem i ustawieniami.
Przy cronie każde z nich byłoby osobnym skryptem, osobnym wpisem crona i osobnym plikiem logu, którego nie czytasz.
Harmonogram
FTPull zawiera funkcję harmonogramu ograniczającą monitorowanie do określonych godzin i dni. Jeśli pliki pojawiają się tylko w godzinach pracy - z systemu działającego 9–17 - nie ma sensu odpytywać w sobotę o 3 w nocy. Ustaw harmonogram (np. 8:00–20:00, poniedziałek–piątek) i FTPull automatycznie zatrzyma się poza tymi godzinami.
Zmniejsza to też niepotrzebny ruch sieciowy i obciążenie serwera - szczególnie istotne przy serwerach z rygorystycznymi limitami.
Gdy coś pójdzie nie tak
Tu FTPull najwyraźniej różni się od podejścia skryptowego. Gdy pobranie się nie powiedzie:
- Plik otrzymuje czerwoną etykietę Findera - widoczną od razu w folderze pobierania bez otwierania aplikacji
- Powiadomienie o błędzie trafia do Centrum powiadomień macOS
- Błąd jest zapisywany w widoku dziennika FTPull z konkretną przyczyną
- Plik jest ponawiany przy następnym cyklu odpytywania
Porównaj to ze skryptem cron: błąd ląduje w pliku logu, którego pewnie nie czytasz, nic poza tym się nie dzieje, plik nie zostaje pobrany, dopóki ktoś nie zauważy.
Skrypty wymagają ciągłej konserwacji
Skrypty powłoki i cron joby nie mają interfejsu, powiadomień ani mechanizmu odtwarzania po błędzie. Zmiana hasła, przeniesienie serwera lub problem z siecią spowoduje cichą awarię - i dowiesz się o tym dopiero, gdy ktoś zapyta, dlaczego pliki nie dotarły.
FTPull zajmuje się tym wszystkim za Ciebie. Skonfiguruj raz i działa cicho w tle bez końca - z pełną informacją zwrotną, gdy coś wymaga Twojej uwagi.