Eu acho que a melhor maneira é usar o inotifywait do pacote "inotify-tools".
Por exemplo, veja a melhor resposta em link
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.
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.