rsync 在同步后导致错误

rsync 在同步后导致错误

当我运行rsync命令将文件推送到生产环境时,有时(并非总是如此,而且这种情况非常罕见)在同步完成后,我们会在生产环境中遇到错误。

命令rsync是;

rsync -avzO --exclude=*.git --exclude=*.log /var/www/html/ver_1/api [email protected]:/var/www/html/ver_1

我已确认以下内容;

  • 生产和测试环境设置(PHP 和 Apache)相互镜像
  • 问题与命令一起使用,rsync因为当我手动复制文件时(使用WinSCP)没有问题 - 所以这不是代码错误。
  • 我们正在从一台 CentOS 机器同步到另一台 CentOS 机器(如果这有什么不同的话)

问题

  • 可能是什么原因导致了这个问题?
    • 为什么它只是偶尔发生(25 次中有 2/3 次)
  • 我怎样才能解决这个问题,或者尽量减少这种情况的发生?

编辑

PHP Fatal error: require_once(): Cannot redeclare class api\lib\classapitools\apitools in /var/www/html/ver_1/api/index.php on line 42

  • 我已将 index.php 文件从测试复制到生产,但没有修复它。
  • 重新运行rsync命令,并没有修复它。
  • 然后我手动复制了所有文件并且它起作用了。我调试了整个应用程序,但它没有返回任何有关该错误的深入信息(我知道为什么会出现错误(一般意义上),但似乎rsync对整个应用程序进行了 FUBAR,直到手动同步)

答案1

问题很可能在于您-a在 rsync 上使用了标志。这相当于一组其他选项,包括-t,它保留文件的修改时间。

由于您不在目标计算机上重新启动应用程序,因此您现在依赖于该计算机是否重新读取部分或全部这些文件,具体取决于应用程序以及是否观察到这些文件被更改。

您尝试使用-rlpgoD而不是-a.在前一个 rsync 中传输的文件的“错误”时间戳(但不是当前的)不应造成任何麻烦,rsync即使时间戳不同,也足够聪明地注意到内容是相同的。

如果您一直使用该--in-place选项,您可能会遇到更多问题。

相关内容