Tarefa em segundo plano no script bash

2

Estou tentando escrever um script "while true" que responda a eventos. (É um webhook para notificações push git, mas isso não é muito relevante neste momento.)

Eu poderia bloquear, aguardar o próximo retorno de chamada, executar a compilação e bloquear novamente, mas se eu receber um retorno de chamada no meio da compilação, perderia isso, por isso estou tentando resolvê-lo da seguinte forma:

# Build loop, run in the background (see "done &" at the bottom)
while true
do
    # If last build start is newer than last push do nothing.
    if [ last-build-start -nt last-push ]
    then
        echo "last-build-start newer than last-push. Doing nothing."
        sleep 3
        continue
    fi
    log "Build triggered $(date)"
    touch last-build-start
    ./build-all-branches.sh
    log "Done. Waiting for next trigger..."
done &

# Terminate above loop upon Ctrl+C
trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT

# Listen for HTTP requests, do nothing but touch last-push
# to trigger a build in the build loop above.
while true
do
    # Wait for hook to be called
    echo -e "HTTP/1.1 200 OK\n\n $(date)" \
        | nc -l 8787 -q 1 > /dev/null

    # Trigger new build
    echo "Triggered... touching last-push"
    touch last-push
done

O problema que estou enfrentando é que o loop de compilação nem sempre é acionado. O touch last-push é executado, mas é como se outra instância do loop de compilação estivesse entrando em ação e executando touch last-build-start de uma maneira atrevida.

Estou acidentalmente iniciando mais de um loop de compilação no código acima? Existe algum outro erro bobo no roteiro?

    
por aioobe 27.10.2017 / 08:42

0 respostas