Detectando em um host remoto que os arquivos foram rsynced para ele

1

Eu tenho uma ferramenta que uso durante o desenvolvimento para sincronizar o código que estou escrevendo no meu laptop com meu ambiente de teste em um host remoto. Isso permite que eu teste rapidamente as alterações sem precisar executar o git-commit / push / pull / build etc. Ele é implementado com o fswatch e o rsync, portanto, ele transmitirá automaticamente as alterações que eu faço localmente para o meu ambiente remoto. No entanto, tenho um problema porque às vezes me esqueço de ativar essa ferramenta e, depois, perco mais tempo do que deveria para descobrir por que meu código não está funcionando.

  1. Existe uma maneira programática no meu host remoto para detectar que qualquer arquivos recentemente (digamos, no último minuto) foram rsync'd para ele?
  2. Além disso, é possível dizer que a ferramenta my é a que faz o rsync-ing? É improvável que outros hosts estejam sincronizando com meu controle remoto, já que eu o possuo, mas quanto mais robusto melhor:)

Meu objetivo final é fazer um pequeno daemon no host remoto que faria algo inofensivo, como alterar a cor do prompt quando a sincronização de arquivos está funcionando.

    
por SegFaults McGee 31.01.2017 / 00:26

3 respostas

0

Uma solução poderia ser fazer com que sua ferramenta ecoasse a data / hora atual para um arquivo na máquina remota após terminar de rsyncar os dados. Então, na máquina remota, tudo o que precisa ser feito é verificar o arquivo para determinar a última vez que os dados foram sincronizados com ele.

Se você estiver usando o linux, você pode detectar mudanças no sistema de arquivos com a API inotify que está embutida no kernel. Com o inotify, você pode detectar quais arquivos foram gravados e executar uma ação com base em qualquer evento ocorrido. (abra, feche, leia, escreva, apague, mova, etc.)

    
por 31.01.2017 / 00:41
0

Você pode colocar um relógio no sistema remoto (com fswatch, inotify, loggedfs ou qualquer interface que preferir) e detectá-lo no diretório de teste. Isso pelo menos o informaria de modificações recentes. Nem todos esses mecanismos podem identificar qual processo os causou, por exemplo, o que o loggedfs pode fazer, mas que o inotify não pode.

Ainda há a questão de lembrar de ativar o relógio. Você pode fazer isso discutindo que seu script de início de teste agora ligue o relógio e faça uma sincronização primeiro se o relógio ainda não tiver sido iniciado.

Mas parece-me que a solução mais simples nesse cenário seria não sincronizar nada. Em vez disso, monte sua árvore local na máquina de teste com o SSHFS.

Veja Como pode Configurar uma conexão SSH reversa para o computador de conexão? para saber como iniciar as conexões SSH da máquina remota de volta à sua máquina local.

    
por 31.01.2017 / 00:43
0

Eu encontrei uma solução que funciona. A solução é medir o tamanho do arquivo periodicamente e copiar o arquivo para si mesmo se ele tiver sido alterado. Eu tenho um script bash que prova o conceito, mas ele precisa ser expandido para medir toda a pasta e subs e se o tamanho da pasta mudou, localize os arquivos que foram alterados e copie esses arquivos individuais em si mesmos. Espero ter um arquivo de alto nível .ignore também. Se você melhorar isso, por favor, compartilhe. Precisamos de um roteiro completo. Aqui está o meu script simples:

while [ 1 ]; do
    x=$(du -b .)
    sleep 3
    y=$(du -b .)
    if [ ! "$x" = "$y" ]; then
        cp App.js x
        cp x App.js
    fi
done
    
por 13.10.2018 / 14:10