Transferência confiável de arquivos entre três sistemas

1

Eu tenho três sistemas dos quais preciso transferir arquivos diariamente:

  • Fornecedor A (site SFTP) - Exclui arquivos após 14 dias

  • Fornecedor B (site SFTP) - Exclui os arquivos depois de processá-los

  • Servidor da empresa (Windows 2008) - armazena arquivos como backups

A cada dia, quero fazer o download de novos arquivos do Fornecedor A para o servidor da empresa e enviá-los ao Fornecedor B. A ressalva com um script de transferência de arquivos simples é que a transferência de arquivos do Fornecedor A para o servidor da empresa pode ser bem-sucedida, mas falha transferência do servidor da empresa para o Fornecedor B. Assim, o fornecedor B não possui um número de arquivos em dias. O fornecedor B não me diz quando estão faltando arquivos e o fornecedor A nem sempre gera um arquivo em um determinado dia.

Alguma idéia de como automatizar esse cenário de transferência de arquivos para que, em caso de falha, o sistema tente novamente mais tarde?

    
por David Glasser 29.08.2014 / 13:33

2 respostas

1

Você só precisa adicionar alguma lógica para repetir o upload para o Fornecedor B após algum período de tempo. Caso você atinja o número máximo de falhas, registre um erro ou envie um e-mail para que ele seja verificado manualmente pela equipe de suporte.

Se você espera que o Fornecedor A não gere arquivos todos os dias, determine a importância dos dias que faltam para decidir se você também deve gerar um alerta / e-mail para eles ou não (por exemplo, você deve ligar para o Fornecedor A para verificar arquivo está faltando no horário esperado).

    
por 29.08.2014 / 14:32
1

Eu faria:

  1. Sincronização unidirecional de arquivos (Fornecedor A - > Pasta "backup" do servidor da empresa).
  2. Clone os arquivos recém-transferidos em uma pasta separada com arquivos para upload (pasta "upload").
  3. Verifique a idade do arquivo mais recente na pasta "backup". Quando tiver mais de X dias, atente.
  4. Tente fazer o upload de todos os arquivos (não apenas novos) da pasta "upload" para o fornecedor B
  5. Remova os arquivos que você conseguiu enviar da pasta "upload"
  6. Alerta sobre qualquer erro (download ou upload)

Repita isso pelo menos uma vez por dia, possivelmente algumas vezes por dia. Ou siga as etapas de 1 a 3 uma vez por dia, mas as etapas de 4 a 6 vezes por dia.

Possível implementação usando o PowerShell:

  1. Use o método assembly WinSCP .NET Session.SynchronizeDirectories :

    $synchronizationResult = $session.SynchronizeDirectories(
        [WinSCP.SynchronizationMode]::Local, "c:\backup\", "/remote_path/", $False)
    
  2. Iterar o SynchronizationResult.Downloads e Copy-Item cada:

    foreach ($download in $synchronizationResult.Downloads)
    {
        Copy-Item $download.Destination -Destination "C:\upload"
    }
    
  3. Use o Get-ChildItem para encontrar o arquivo mais recente:

    # Find the latest file
    $latest = Get-ChildItem "C:\backup" |
        Sort-Object LastWriteTime -Descending | Select-Object -First 1
    
    # Is the latest file older than 5 days?
    if ($latest.LastWriteTime -lt (Get-Date).AddDays(-5))
    {
        # alert!
    }
    
  4. Use o método de montagem WinSCP .NET Session.PutFiles :

    $transferResult = $session.PutFiles("C:\upload\*.*", "/remote_path/")
    
  5. Iterar TransferResult.Transfers e Remove-Item cada:

    foreach ($transfer in $transferResult.Transfers)
    {
        if ($transfer.Error -eq $Null)
        {
            Remove-Item $transfer.FileName
        }
    }
    
  6. Teste o SynchronizationResult.IsSuccess e o TransferResult.IsSuccess

(eu sou o autor do WinSCP)

    
por 01.09.2014 / 19:39