Могут ли разные сценарии использовать файл блокировки, чтобы убедиться, что они не мешают друг другу?

В прошлом я много использовал flock, чтобы гарантировать, что процесс запускается только один раз (на случай, если он зависнет и т. Д.), Но я никогда не использовал его для двух разных процессы.

В этом сценарии два разных сценария влияют на один и тот же каталог «temp» (каталог стирается в начале каждого запуска). Поэтому мне нужно убедиться, что временный каталог не засоряется одним скриптом, в то время как он все еще нужен другому.

Моя цель:

  • Гарантировать, что 2 разных скрипта никогда не выполняются одновременно.

Например (пример cron):

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

Это правильный способ изолировать эти два сценария друг от друга?

1
задан 20 January 2018 в 00:33
2 ответа

Сделай сам, чтобы написать скрипт, который будет иметь дело с твоим файлом блокировки, в конце концов, выполняя свою работу.

Скажем, вы создаёте какой-нибудь /my/job исполняемый файл, со следующим:

#!/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 $?

Тогда ваш кронтаб будет выглядеть так:

0 * * * * /my/job /some/script1.sh
2 * * * * /my/job /some/script2.sh
1
ответ дан 3 December 2019 в 20:17

Этот пример есть в man flock в моём 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.

Так что, как я понял, блокировка может быть разделена.

Смотрите больше в разделе EXAMPLES man flock.

.
1
ответ дан 3 December 2019 в 20:17

Теги

Похожие вопросы