Como posso sincronizar arquivos automaticamente na minha VM do CentOS?

2

Eu tenho que continuar copiando arquivos do meu diretório ~ / src para / home / httpd, o que é uma dor quando estou fazendo alterações no front end. Existe uma maneira que eu possa ter mudado arquivos de sincronização automagicamente? - e especificamente apenas enquanto estou desenvolvendo - algo que posso ligar e desligar.

    
por qodeninja 06.12.2011 / 01:29

3 respostas

2

Embora não seja automático, depois de fazer as modificações, use o rsync:

$ rsync -r --delete /home/username/src/ /home/httpd

Você pode até criar um alias:

$ alias sync='rsync -r --delete /home/username/src/ /home/httpd'

Como eu enfatizo para todos, antes de usar isso, você deve verificar man rsync para opções adicionais.

Além disso, sugiro strongmente o controle de versões ( svn ou git talvez) por uma infinidade de razões.

Editar:

O que eu pessoalmente faria é usar um loop bash loop --- especificamente while com sleep . Digite o seguinte no shell:

while true; do 
    sleep 300 # Every 5 minutes
    rsync -r --delete /home/username/src/ /home/httpd
done &

Isso tornará um trabalho em segundo plano que você pode matar a qualquer momento. Basta digitar jobs para ver o índice do trabalho e, quando você não precisar mais dele, digite kill %(index) .

Como alternativa, para adicionar o comando como cron job, por exemplo, a cada 10 minutos, acrescente o seguinte ao seu crontab:

*/10 * * * * rsync -r --delete /home/username/src/ /home/httpd

Para editar seu crontab:

$ crontab -e
    
por 06.12.2011 / 04:11
3

Não sei bem qual é o seu objetivo, mas algumas sugestões que podem ser de alguma utilidade:

Instant, na modificação (salvar): Se você quiser que os arquivos sejam atualizados assim que um for modificado, eu posso perguntar por que você não apenas faz as alterações em / home / httpd e então, quando tudo estiver de acordo com sua satisfação, copie-os de volta. A idéia de um diretório de trabalho para salvaguardas (ou para evitar derrubar seu site com uma edição ruim) é negada se as mudanças precisarem ser copiadas imediatamente.

Quase instantâneo, na modificação: Se, por algum motivo, você desejar que suas alterações sejam aplicadas quase instantaneamente, na modificação do arquivo (ou seja, assim que um arquivo for salvo, ele será copiado), sugiro pesquisar em incron . Pode ser configurado para acionar um script quando um diretório é alterado.

Sob demanda (não instantânea):

Se você deseja concluir todas as suas edições e, em seguida, enviar as alterações (que é o que espero que esteja procurando), terá várias opções. Eu presumo que o aborrecimento está em determinar quais arquivos foram alterados e copiá-los de vários diretórios diferentes.

Script de shell: Uma solução simples para isso é usar rsync . Ele irá determinar quais são as mudanças em seu diretório ~ / src em relação ao seu diretório / home / httpd, e fazer as mudanças necessárias para colocar seu / home / httpd em sincronia com o seu diretório fonte.

Controle de versão: A solução mais eficaz, embora seja consideravelmente mais complexa que o rsync, é o controle de versão - por exemplo, o Subversion. Basicamente:

  • Crie um repositório no seu servidor
  • Importe seus arquivos para o repositório
  • Confira uma cópia de trabalho para / home / httpd
  • Configurar um gancho de pós-consolidação que atualizará / home / httpd
  • Confira uma cópia de trabalho para ~ / src
  • Faça suas alterações e confirme-as no repositório ( svn commit ) - o gancho atualizará automaticamente / home / httpd

Embora seja mais difícil de configurar, inicialmente, essa abordagem permite o maior controle e permite reverter facilmente as alterações, listar os arquivos modificados e ver quais alterações (diffs) foram feitas em cada revisão - você também pode adicionar uma descrição às suas alterações com cada commit.

    
por 06.12.2011 / 02:20
1

Veja lsyncd . Ele usa inotify para obter informações sobre alterações nos arquivos e sincronizá-los através do rsync.

    
por 06.12.2011 / 07:37

Tags