Existem duas abordagens principais:
-
faça o script sair se detectar outra instância em execução. Basta adicionar essas linhas ao início do seu script:
if [ $(pgrep -c "${0##*/}") -gt 1 ]; then echo "Another instance of the script is running. Aborting." exit fi
$0
é o nome do script e${0##*/}
é o nome do script com tudo até o último/
removido (portanto,/path/to/script.sh
se tornascript.sh
). Isso significa que, se você tiver outro script não relacionado com o mesmo nome em execução, ele ainda será detectado. por outro lado, isso também significa que ele funcionará mesmo se você chamar o script de um link simbólico. Qual você prefere depende do seu caso de uso. -
Use um arquivo de bloqueio e saia do script se o arquivo existir:
#!/bin/bash if [ -e "/tmp/i.am.running" ]; then echo "Another instance of the script is running. Aborting." exit fi else touch "/tmp/i.am.running" fi ## The rest of the script goes here rm "/tmp/i.am.running"