
Então executamos esse script que adiciona dados a um arquivo e estou tentando adicionar algo para verificar se o script já está sendo executado. Nesse caso, quero fazer uma pausa e verificar novamente em 20 segundos e repetir até descobrir que não está funcionando. Nesse ponto, gostaria de prosseguir para o restante do script. Portanto, preciso saber como fazer com que ele continue verificando até que esteja tudo bem para prosseguir. Alguém tem uma ideia?
if [ `ps -ef| grep $script_name_with_arguments | wc -l ` -gt 1 ]
then
echo "already running"
sleep 20s
else
echo "ok"
fi
}```
Responder1
Você usa algum tipo de bloqueio.
A maneira mais simples é um arquivo de bloqueio. Existem alguns pacotes que irão gerenciar isso para você; você não disse qual era a sua plataforma ou distro, então não posso ser muito preciso sobre isso, mas uma delas é o procmail
pacote que acompanha o lockfile
programa.
Você usaria isso em seu script assim:
LOCK=/run/npaulsen/mylockfile.lock
lockfile -20 $LOCK
run_the_fscking_rest_of_my_script
rm -f $LOCK
Existem refinamentos que você pode fazer para evitar que ele fique preso indefinidamente no caso de uma instância travar. Você pode ler a página de manual sobre isso: man 1 lockfile
. Ou você pode implementar o seu próprio - é trivial, mas você precisará de uma linguagem de programação real (não de um shell script).
Outra ideia mais sofisticada (mas também mais complexa) seria utilizar semáforos POSIX; tentar man 7 sem_overview
.