三个系统之间可靠的文件传输

我有三个系统需要在每天之间传输文件:

每天我都要从供应商A下载新文件到我们公司的服务器,并将它们上传到供应商B.使用简单的文件传输脚本的警告是,从供应商A到公司服务器的文件传输可能会成功,但在从公司服务器到供应商B.因此供应商B缺less一天的文件价值。 供应商B不会告诉我他们何时缺less文件,供应商A并不总是在给定的日子里生成文件。

有关如何自动执行此文件传输scheme的任何想法,以便在发生故障时系统将在稍后再试一次?

您只需添加一些逻辑即可在一段时间后重新尝试上传到供应商B. 如果您达到最大失败次数,请logging错误或发送电子邮件,以便由支持团队手动进行validation。

如果您预计供应商A不会每天生成文件,请确定缺less的date有多重要,您是否应该为这些文件生成警报/电子邮件(例如,您必须致电供应商A以检查文件缺失的原因在预期的时间)。

我会做:

  1. 单向同步文件(供应商A – >公司服务器“备份”文件夹)。
  2. 将新下载的文件克隆到单独的文件夹,上传文件(“上传”文件夹)。
  3. 检查“备份”文件夹中最新文件的大小。 当比X天更旧时,提醒。
  4. 尝试将所有(不仅是新的)文件从“上传”文件夹上传到供应商B.
  5. 从“上传”文件夹中删除您成功上传的文件
  6. 警告任何(下载或上传)错误

至less每天重复一次,可能每天几次。 或者一天做一次1-3步,但每天几次4-6步。

使用PowerShell的可能实现:

  1. 使用WinSCP .NET组装方法Session.SynchronizeDirectories

     $synchronizationResult = $session.SynchronizeDirectories( [WinSCP.SynchronizationMode]::Local, "c:\backup\", "/remote_path/", $False) 
  2. 分别遍历SynchronizationResult.DownloadsCopy-Item

     foreach ($download in $synchronizationResult.Downloads) { Copy-Item $download.Destination -Destination "C:\upload" } 
  3. 使用Get-ChildItem来查找最新的文件:

     # 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. 使用WinSCP .NET组装方法Session.PutFiles

     $transferResult = $session.PutFiles("C:\upload\*.*", "/remote_path/") 
  5. 迭代TransferResult.TransfersRemove-Item每个:

     foreach ($transfer in $transferResult.Transfers) { if ($transfer.Error -eq $Null) { Remove-Item $transfer.FileName } } 
  6. 同时testingSynchronizationResult.IsSuccessTransferResult.IsSuccess

(我是WinSCP的作者)