Execute .sh toda vez que um arquivo for alterado

2

Estou trabalhando com um sistema que usa um servidor Ubuntu como base, mas programamos no Windows. As VMs estão usando o comando Mount para acessar os arquivos no Windows.

Sempre que alguém salva um arquivo, essa pessoa precisa acessar o servidor e executar novamente o comando para baixar e recuperar o servidor ERP novamente.

Como não alteramos muito os arquivos (uma equipe de 2 ou 3 está trabalhando em alguns arquivos), existe alguma maneira de acionar um script toda vez que um arquivo é alterado?

Fluxo de trabalho: Programador salva o arquivo > > Arquivo de atualização do Windows na pasta ERP > > A instância do Linux que tem a pasta do windows montada recebe a atualização > > O Linux executa o comando .sh que executa novamente o servidor.

    
por Tonon 07.05.2013 / 23:15

3 respostas

1

Eu acho que a melhor maneira é usar o inotifywait do pacote "inotify-tools".

Por exemplo, veja a melhor resposta em link

    
por epineda 09.05.2013 / 13:25
1

Você pode usar a ferramenta entr , por exemplo

$ ls -d * | entr sh -c 'make && make test'
    
por kenorb 06.07.2016 / 19:02
0

Eu tive um problema como o seu. Estou desenvolvendo um programa em tornado e tenho que reiniciar o servidor em cada commit, então eu acabei de escrever um programa no bash que fecha todos os processos python e os inicia novamente

#!/bin/bash
function init {
    LIST='pgrep python'
    IFS=' ' read -a arr <<< "${LIST}"
    for pid in "${arr[@]}"
    do
        echo $pid
        'kill -9 $pid'
    done
}
init
IN='python server.py'&

CONTENT='cat server.py'
while :
do
    sleep 1
    CURR='cat server.py'
    if [ "$CONTENT" != "$CURR" ]; 
        then 
            init
            IN='python server.py'&
            CONTENT='cat server.py'

            echo "Restarted."
        fi;
done

O script é executado como um daemon, quando o arquivo é alterado, ele reinicia o servidor.

Talvez não seja a melhor solução, mas funciona.

    
por Dima Savva 07.05.2013 / 23:47