LINUX.ORG.RU

эксклюзивный лок и bash scripting


0

0

Решил во все скрипты добавить что-то вроде такого:

(
    flock -n 200
    status=$?

    if [ "$status" -ne 0 ];then
        echo "cant acquire lock"
        exit 1
    fi

    main_function
) 200>>$LOCKFILE

Косяк в том что если в main_function делается вызов внешних программ то эти процессы так же наследуют fd 200. И, естественно, пока хотя бы один процесс держит этот дескриптор открытым, лок будет удерживаться, даже если этот скрипт завершиться.

Вопрос- что делать? У меня, конечно, есть враппер который тупо все дескрипторы закрывает и потом уже вызывает внешнюю программу, но это как-то неправильно.

Можно, конечно, сам скрипт запускать через flock -n $LOCKFILE script.bash, но так я рано или поздно забуду про flock и запущу напрямую(т.е. нужна защита от <strike>дурака</strike> забывчивого админа).

★★★★★
Ответ на: комментарий от true_admin

(
flock -n 200
status=$?

if [ "$status" -ne 0 ];then
echo "cant acquire lock"
exit 1
fi

(
exec 200<&-;
main_function
)
) 200>>$LOCKFILE

Может так?

Devix
()
Ответ на: комментарий от true_admin

> не помогло

Еще заменить скобки на фигурные??

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.