rsync causando erros após a sincronização

3

Quando executo o comando rsync para enviar meus arquivos para produção, às vezes - nem sempre, e é muito raro - depois que a sincronização é concluída, estamos recebendo erros em nosso ambiente de produção.

O comando rsync é;

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

Eu confirmei o seguinte:

  • Configurações do ambiente de produção e teste (PHP e Apache) espelham-se mutuamente
  • O problema tem de estar com o comando rsync porque quando copio os arquivos manualmente (usando WinSCP ) não há problema - por isso não é uma falha de código.
  • Estamos sincronizando de uma máquina do CentOS para uma máquina do CentOS (se isso fizer alguma diferença)

Perguntas

  • O que poderia estar causando o problema?
    • Por que isso só aconteceria às vezes (2/3 vezes de 25-ish)
  • Como posso resolvê-lo ou minimizar a ocorrência?

Editar

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

  • Eu copiei o arquivo index.php do teste para a produção, mas isso não foi corrigido.
  • Execute novamente o comando rsync e ele não corrigiu.
  • Então eu copiei todos os arquivos manualmente e funcionou. Eu depurei o aplicativo inteiro, mas ele não retornou nada perspicaz sobre o erro (eu sei porque o erro está lá (em um sentido geral), mas o rsync parecia ter FUBAR'd toda a aplicação até uma sincronização manual )
por ʰᵈˑ 05.11.2014 / 12:22

1 resposta

3

O problema provavelmente está no uso do sinal -a no rsync. Isso equivale a um conjunto de outras opções, incluindo -t , que preserva o tempo de modificação dos arquivos.

Como você não reinicia o aplicativo na máquina de destino, agora depende da máquina que está relendo alguns ou todos os arquivos ou não, dependendo do aplicativo e se esses arquivos são observados como alterados.

Você tenta usar -rlpgoD em vez de -a . O timestamp "errado" dos arquivos transferidos no rsync anterior (mas não no atual), não deve causar nenhum problema, rsync é inteligente o suficiente para perceber que o conteúdo é o mesmo, mesmo que os timestamps não sejam.

Se você estivesse usando a opção --in-place , provavelmente encontraria mais problemas.

    
por 05.11.2014 / 16:01

Tags