Podem scripts diferentes compartilhar um arquivo de trava para garantir que eles não interfiram uns com os outros?

2

Eu usei muito o bando no passado para garantir que um processo só gera uma vez (no caso de ser pendurado / etc), mas eu nunca usei isso para dois processos diferentes.

Neste cenário, dois scripts diferentes afetam o mesmo diretório "temp" (o diretório é danificado no início de cada execução). Portanto, preciso garantir que o diretório temporário não seja danificado por um script, enquanto outro ainda esteja precisando dele.

Meu objetivo:

  • Garanta que dois scripts diferentes nunca sejam executados lado a lado.

Por exemplo (amostra de cron):

0 * * * * flock -w 2 /tmp/lockfile.lock /some/script1.sh
2 * * * * flock -w 2 /tmp/lockfile.lock /another/script2.sh

Esta é a maneira correta de isolar esses dois scripts uns dos outros?

    
por emmdee 19.01.2018 / 23:33

2 respostas

1

Um DIY pode ser escrever um script, que lida com o seu arquivo de bloqueio, enquanto executa o seu trabalho.

Digamos que você crie um executável /my/job , com o seguinte:

#!/bin/sh

# to be tuned, at your convenience
LASTLOG=/tmp/job.log
LOCKFILE=/tmp/lockfile.lock
RETRY=3
WAIT=10
if test -z "$1"; then
    echo missing job script >&2
    exit 1
elif ! test -x "$1"; then
    echo can not execute "$1" >&2
    exit 1
fi
cpt=0
while test $cpt -lt $RETRY
do
    if ! test -s $LOCKFILE; then
        echo $$ >$LOCKFILE
        break
    fi
    sleep $WAIT
done
if ! grep ^$$$ $LOCKFILE >/dev/null 2>&1; then
    echo could not acquire lock >&2
    exit 2
fi
"$1" >$LASTLOG 2>&1
ret=$?

rm -f $LOCKFILE

exit $?

Então, o seu crontab seria parecido com:

0 * * * * /my/job /some/script1.sh
2 * * * * /my/job /some/script2.sh
    
por 20.01.2018 / 00:02
1

Existe este exemplo em man flock no meu Debian:

shell1> flock /tmp -c cat
shell2> flock -w .007 /tmp -c echo; /bin/echo $?
          Set exclusive lock to directory /tmp and the second command will fail.

Então eu entendo que o bloqueio pode ser compartilhado.

Veja mais na seção EXEMPLOS de man flock .

    
por 20.01.2018 / 00:08