Estou escrevendo um script bash no qual devo executar 3 comandos.
- O comando
1
deve ser executado a cada 10 segundos, em segundo plano - Comandos
2
e3
devem ser executados uma vez e também em segundo plano. - Além disso, o comando
1
deve ser executado pelo menos uma vez, com sucesso, antes do comando2
e3
da execução, pois produz/atualiza um arquivo que os 2 últimos precisarão para o bom funcionamento.
Porém, não sei como fazer o comando 1
rodar com essas condições... Não consigo usar a while(1)
com a sleep 10
ou algo do tipo, pois assim nunca alcançaria os comandos 2
e 3
.
Que conceito de script bash estou perdendo? Fios, talvez?
Edit: Command 1
pode ser algo tão simples quanto incrementar um número inteiro dentro de um arquivo .txt e este arquivo será usado em command 2
e 3
.
Controle de trabalho. Você pode iniciar processos em segundo plano e exercer um controle bastante refinado sobre eles conhecendo o ID do processo e o status de saída.
Para obter o PID de um comando em segundo plano, use a
$!
variável.Para obter o status de saída de um comando em segundo plano, use
wait()
e forneça seu PID. Observe que as chamadas parawait()
serão bloqueadas se o comando ainda não tiver saído . Se esse bloqueio for problema (pode ser no seu caso), você pode realizar verificações comps
(ou algum outro método) antes de chamarwait()
para ver se seu processo está pronto para ser colhido, geralmente em um loop onde existe um watchdog ou algum outro método de definir um limite no tempo de execução da tarefa.Considere o seguinte clichê baseado em ciclo:
Para um controle de trabalho mais complexo, você pode mover suas verificações de comando e gerenciamento de ciclo para funções bash e limpar muito esse código.