Script Unix: aguarde até que exista um arquivo

6

Eu preciso de um script que esperará que um (examplefile.txt) apareça no diretório / tmp

e uma vez que é encontrado para parar o programa, caso contrário, para dormir o arquivo até que seja localizado

Até agora eu tenho:

se [! -f /tmp/examplefile.txt]

então

    
por Cidricc 16.02.2015 / 17:21

2 respostas

11

Esta função bash bloqueará até que o arquivo fornecido apareça ou um determinado tempo limite seja atingido. O status de saída será 0 se o arquivo existir; Caso contrário, o status de saída refletirá quantos segundos a função esperou.

wait_file() {
  local file="$1"; shift
  local wait_seconds="${1:-10}"; shift # 10 seconds as default timeout

  until test $((wait_seconds--)) -eq 0 -o -f "$file" ; do sleep 1; done

  ((++wait_seconds))
}

E aqui está como você pode usá-lo:

# Wait at most 5 seconds for the server.log file to appear

server_log=/var/log/jboss/server.log

wait_file "$server_log" 5 || {
  echo "JBoss log file missing after waiting for $? seconds: '$server_log'"
  exit 1
}

Outro exemplo:

# Use the default timeout of 10 seconds:
wait_file "/tmp/examplefile.txt" && {
  echo "File found."
}
    
por 20.05.2015 / 10:51
5
until [ -f /tmp/examplefile.txt ]
do
     sleep 5
done
echo "File found"
exit

A cada 5 segundos, ele será ativado e procurará o arquivo. Quando o arquivo aparecer, ele sairá do loop, informará que encontrou o arquivo e sairá (não necessário, mas limpo).

Coloque isso em um script e inicie-o como roteiro &

Isso será executado em segundo plano.

Pode haver diferenças sutis na sintaxe, dependendo do shell que você usa. Mas essa é a essência disso.

    
por 16.02.2015 / 22:54