Seu script deve verificar se há apenas uma instância. Tente algo assim:
#!/bin/bash
mkdir ~/.lock_script || exit
trap "rmdir ~/.lock_script" EXIT
while true
do
# Do whatever the script does continuously, here....
#
done
O comando trap
cuida da limpeza na saída, portanto, mesmo que o script seja eliminado ou terminado, ele será limpo. Nenhum processo pode capturar (interceptar) o sinal TERM (Sinal 9), portanto, se você kill -9
do script, ele não será limpo após ele mesmo.
O mkdir é uma operação atômica no que diz respeito ao kernel. Se o mkdir não tiver êxito (por exemplo, se o diretório já existir), o comando retornará um erro, o que faz com que a segunda metade do comando seja executada - por exemplo, sair.
Você pode ler o comando como "mkdir or else exit" - é melhor explicado aqui: link
Eu também sugiro que você não use while true
desta forma - tente se possível pensar em outra maneira de fazer o que você quer fazer.