Peça que cada script verifique um determinado arquivo (por exemplo, /var/tmp/script1-2
).
Se o arquivo de verificação não existir, escreva o nome do outro script no arquivo o mais cedo possível, para evitar que ele seja executado enquanto este script estiver sendo executado.
Se ele existir e contiver seu próprio nome, saia. Caso contrário, execute normalmente.
Pouco antes de sair, cada script deve escrever seu próprio nome no arquivo.
CHECKFILE="/var/tmp/script1-2"
MYNAME='script1'
OTHERNAME='script2'
[ ! -s "$CHECKFILE" ] && echo "$OTHERNAME" > "$CHECKFILE"
[ -s "$CHECKFILE" ] && grep -qwF "$MYNAME" && exit 1
# rest of script here
.
.
echo "$MYNAME" > "$CHECKFILE"
As opções grep
são:
-
-q
para tranquilidade, não produz saída
-
-w
para correspondência apenas de palavras inteiras
-
-F
para correspondência de cadeias fixas, não expressões regulares.
Nota: se ambos os scripts forem executados no exatamente ao mesmo tempo e $ CHECKFILE ainda não existir, ambos serão executados. Qualquer um que termine por último (leva mais tempo para executar) terminará com seu nome escrito em $ CHECKFILE. Para evitar isso, execute echo script2 > /var/tmp/script1-2
antes de executar qualquer um deles.