Zajmowałem się nie tak dawno przenoszeniem dość dużej aplikacji na nowy serwer. Cały proces zajął ostatecznie kilka dni. Jednak aby samo przełączenie użytkowników do pracy w nowym środowisku odbyło się możliwie bez przerw, największą przeszkodą do pokonania stało się utrzymanie magazynu załączników w aktualnym stanie.
Postanowiłem na bieżąco pobierać zmiany z bieżącego środowiska do nowego za pomocą zautomatyzowanego połączenia SFTP za pomocą LFTP.
Plik konfiguracyjny – mirror dwóch katalogów
Najpierw utworzyłem plik konfiguracyjny. W moim przypadku nazywał się storage_mirror.lftp.
Dodałem do niego następujące komendy.
1 2 3 4 5 6 7 | set ssl:verify-certificate yes set sftp:auto-confirm yes mirror --verbose --use-pget-n=4 -c --verbose /old/server/path/to/download /new/server/local/path; bye |
Za pomocą argumentu --use-pget-n=4 można zdecydować ile plików ma być pobieranych jednocześnie. W tym przypadku są to 4 pliki.
Argument --verbose pokazuje w konsoli bieżący i szczegółowy stan zadania.
Uruchamianie pobierania plików
Po zapisaniu pliku konfiguracyjnego połączenia można odpalić skrypt.
1 | lftp -f /path/to/storage_mirror.lftp |
Za pierwszym razem – w zależności od zasobności katalogu i prędkości połączenia – proces może potrwać naprawdę długo. Każde późniejsze wywołanie skryptu analizuje całe drzewo plików i katalogów na serwerze zdalnym, pobierając tylko zmiany.
Automatyzacja
Powyższe polecenie dodałem jako zadanie CRON, tak aby wykonywało się co 30 minut.
1 | */30 * * * * "lftp -f /path/to/storage_mirror.lftp" |
Dzięki temu katalog z załącznikami na nowym serwerze był na bieżąco aktualizowany.
Tagi: cron • lftp • mirror • sftp