Robocopy PURGE(或MIR)选项不会删除正在使用的文件,也不会报告错误
在TFS版本中,有一个名为“Windows Machine File Copy”的发布步骤。在它的封面下,它使用robocopy将文件从源文件复制到目标文件。Robocopy PURGE(或MIR)选项不会删除正在使用的文件,也不会报告错误
下面是它使用的选项:
*.* /S /E /DCOPY:DA /COPY:DAT /PURGE /MIR /MT:8 /R:1000000 /W:30
在此之前的发行步骤停止Windows服务,该服务工作正常。剧本结尾处甚至有3秒的延迟。我想我们已经编写了这个服务来完成关机期间的所有通信,所以完成时间超过3秒。发生这种情况时,一些文件正在使用中。 Robocopy似乎对它复制的文件工作正常,但* EXTRA文件是一个不同的故事,它们不会被删除,也不会被重试 - 就在那里。此外,最后的报告显示没有错误,即使日志中有很多错误。
2017-05-08T15:37:07.7528791Z -------------------------------------------------------------------------------
2017-05-08T15:37:07.7528791Z ROBOCOPY :: Robust File Copy for Windows
2017-05-08T15:37:07.7528791Z -------------------------------------------------------------------------------
2017-05-08T15:37:07.8622643Z Started : Monday, May 8, 2017 10:37:07 AM
2017-05-08T15:37:07.8622643Z Source : F:\Source
2017-05-08T15:37:07.8622643Z Dest : \\myserver\E$\destination\
2017-05-08T15:37:07.8622643Z Files : *.*
2017-05-08T15:37:07.8622643Z
2017-05-08T15:37:07.8622643Z Options : *.* /S /E /DCOPY:DA /COPY:DAT /PURGE /MIR /MT:8 /R:1000000 /W:30
2017-05-08T15:37:07.8622643Z ------------------------------------------------------------------------------
2017-05-08T15:37:09.0185873Z *EXTRA File 269824 \\myserver\E$\epay\destination\HtmlAgilityPack.pdb
2017-05-08T15:37:09.5186163Z *EXTRA File24 \\myserver\E$\destination\Common.pdb
2017-05-08T15:37:09.5186163Z 2017/05/08 10:37:09 ERROR 5 (0x00000005) Deleting Extra File \\myserver\E$\destination\Common.pdb
2017-05-08T15:37:09.5186163Z Access is denied.
你可以清楚地看到错误,但报告没有显示任何错误,并发布阶段,成功在我们的发布引起的潜在问题。
2017-05-08T15:37:46.8492207Z Total Copied Skipped Mismatch FAILED Extras
2017-05-08T15:37:46.8492207Z Dirs : 1 1 0 0 0 0
2017-05-08T15:37:46.8492207Z Files : 54 54 0 0 0 49
2017-05-08T15:37:46.8492207Z Bytes : 8.45 m 8.45 m 0 0 0 8.55 m
2017-05-08T15:37:46.8492207Z Times : 0:01:49 0:00:25 0:00:00 0:00:13
正如我所说,它不会尝试重试失败的删除,但它会重试复制失败的文件,由于同样的错误,因为我已经看到证据在日志中。
有没有办法告诉robocopy重试失败的删除和报告错误,如果任何文件无法删除?我已阅读所有文档,但找不到与此问题或可能的解决方法有关的任何内容。有任何想法吗?
“额外”文件是目标文件夹中的文件,但不在源文件夹中。据此,我想知道“Common.pdb”是由您的发布服务器上的任何服务/应用程序生成的,而不是您的生成/发布,这意味着您可能没有权限删除此文件。并且robocopy错误0x00000005通常也是由权限问题引起的。因此,您需要转到“Common.pdb”文件的路径以检查权限,并尝试使用在Windows计算机文件复制任务中配置的帐户手动将其删除。
这是一个很好的观点。我一定会检查并提供更新。这也许可以解释为什么重试机制不重试,也许它不会重试“访问被拒绝”错误。重点是什么? –
这不是一个权限问题 - 当我停止服务后10秒的延迟脚本时,EXTRA文件被成功删除。也许唯一的解决办法是先擦除文件夹然后复制。缺点是TFS没有从远程服务器上删除文件夹的内置步骤。 –
@ChrisGessler由于如果正在使用该文件,错误应该是错误32,因此已连线。该文件与您停止的Windows服务之间的关系是什么?停止服务后,如果在服务器上手动删除文件,是否出现错误? –
您是否尝试过使用错误代码?
https://ss64.com/nt/robocopy-exit.html
任何低于%ERRORLEVEL%
8好像你想要的水平。
从ROBOCOPY-exit.html复制粘贴:
ROBOCOPY \\Server1\reports \\Server2\backup *.*
IF %ERRORLEVEL% LSS 8 goto finish
Echo Something failed & goto :eof
:finish
Echo All done, no fatal errors.
这可能是我需要的 - 我必须做一些研究并可能修改微软的任务以适应。不是一个简单的任务,但谢谢! –
你用什么版本的TFS的。我尝试在TFS2017.1中测试您的问题,并且如果使用这些文件,则Windows文件机器副本无法将其删除,并等待此文件完成使用。当文件完成使用时,它将被删除。看看我测试的[图片](https://1drv.ms/i/s!AopgZUVNxLwJgUT8-flyw4CN22xJ),它会多次重试删除该文件。 –
您能否给出重现您问题的步骤? –
@ Tingting0929-MSFT - 您的照片显示正在使用的文件并重试复制的文件。这对我来说也很好。尝试删除源目录中目标目录中正在使用的一些文件。 –