A necessidade é simples: saber quando aparecem ficheiros novos num servidor FTP remoto e fazer algo com eles - descarregá-los, processá-los, desencadear outro fluxo de trabalho. O problema é que os servidores FTP não enviam notificações. Ficam à espera. Tem de ser o utilizador a perguntar.

Há duas formas de resolver isto. A primeira exige Terminal, conhecimentos de scripts em bash e aceitar que as falhas acontecem sem aviso. A segunda dispensa tudo isso.

À maneira difícil: scripts e cron

Se perguntar a um administrador de sistemas como monitorizar uma pasta FTP, a resposta habitual passa pelo lftp - um cliente FTP de linha de comandos - combinado com um cron job ou um agente launchd que o executa periodicamente.

A configuração típica é esta. Primeiro, um script em bash que usa o lftp para espelhar a pasta remota numa local:

#!/bin/bash
# descarregar-do-ftp.sh
lftp -u utilizador,palavra-passe ftp.exemplo.com << EOF
mirror --only-newer --no-recursion /pasta/remota /Users/eu/Downloads/ftp-vigiar/
quit
EOF

Depois, agendar com uma entrada no cron (crontab -e) para correr a cada cinco minutos:

# Sincronizar FTP de 5 em 5 minutos
*/5 * * * * /Users/eu/scripts/descarregar-do-ftp.sh >> /tmp/ftp-sync.log 2>&1

Funciona. Se tudo estiver corretamente configurado e permanecer assim, verifica o servidor de cinco em cinco minutos e descarrega o que for novo.

Mas há problemas sérios nesta abordagem:

Para quem está à vontade no terminal e prefere código a interfaces gráficas, isto pode ser aceitável. Para qualquer outra pessoa - e para fluxos de trabalho onde a fiabilidade e o feedback importam - é a ferramenta errada.

À maneira fácil: FTPull

FTPull é uma aplicação macOS que monitoriza pastas FTP remotas e descarrega automaticamente os ficheiros novos. É uma interface gráfica para o mesmo conceito fundamental - polling periódico ao servidor - mas com todos os problemas da abordagem de scripts resolvidos.

Para começar a monitorizar uma pasta FTP:

  1. Instale o FTPull e abra-o a partir da pasta Aplicações. Aparece um ícone na barra de menus.
  2. Abra as Definições e adicione uma nova ligação: endereço, porta, utilizador, palavra-passe, protocolo (FTP/SFTP/FTPS).
  3. Defina o caminho da pasta remota - o diretório no servidor que quer vigiar.
  4. Defina uma pasta local - onde os ficheiros descarregados devem ficar no Mac.
  5. Defina o intervalo de polling - com que frequência o FTPull verifica o servidor. A cada minuto para monitorização mais imediata; a cada 5 minutos se preferir menos tráfego de rede.
  6. Ative a ligação. O FTPull começa a fazer polling de imediato.

É tudo. A partir deste momento, o FTPull trata de tudo automaticamente. Quando aparece um ficheiro novo no servidor, o FTPull deteta-o na próxima verificação, descarrega-o e envia uma notificação macOS.

O que o FTPull monitoriza

O FTPull acompanha o estado da pasta remota comparando a listagem atual com a da verificação anterior. Tudo o que for novo é descarregado. Concretamente:

Filtros de extensão

Se só precisar de certos tipos de ficheiro - por exemplo, ficheiros .csv de um feed de dados ou .pdf de um sistema de processamento - configure um filtro de extensão. O FTPull ignora silenciosamente todo o resto. Útil quando a pasta remota recebe tipos de ficheiro que não são relevantes para o seu fluxo de trabalho.

Várias pastas, vários servidores

Uma das vantagens práticas face aos scripts é a gestão de múltiplas ligações. Precisa de monitorizar cinco servidores FTP diferentes - um de cliente, um interno, um fornecedor e duas variantes regionais? Adicione cinco ligações no FTPull. Correm de forma independente a partir de um único ícone na barra de menus, cada uma com o seu próprio intervalo e definições.

Com cron, cada uma seria um script separado, uma entrada de cron separada e um ficheiro de log separado para não ler.

Agendamento

O FTPull inclui uma função de agendamento que restringe a monitorização a determinados horários e dias. Se os ficheiros só chegam em horário laboral - de um sistema que funciona das 9 às 17 - não faz sentido verificar o servidor às 3 da manhã de um sábado. Defina o horário (por exemplo, das 8h às 20h, de segunda a sexta), e o FTPull pausa automaticamente fora desse intervalo.

Isto também reduz o tráfego de rede desnecessário e a carga no servidor - especialmente relevante quando há limites de ligações ou rate limits rigorosos.

Quando algo corre mal

É aqui que o FTPull se distingue mais claramente da abordagem com scripts. Quando um download falha:

Compare com um script de cron: o erro é acrescentado a um ficheiro de log que provavelmente ninguém está a ler, não acontece mais nada e o ficheiro nunca é descarregado até alguém dar pela falta.

Os scripts exigem manutenção constante

Scripts e cron jobs não têm interface, não enviam notificações e não recuperam de erros. Uma mudança de credenciais, um servidor migrado ou um problema de rede faz com que parem sem aviso - e só se descobre quando alguém pergunta por que os ficheiros nunca chegaram.

O FTPull trata de tudo isso. Configure uma vez e fica a correr discretamente em segundo plano indefinidamente - com feedback completo quando algo precisa da sua atenção.