| Summary: | update flock | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | ildar <ildar> |
| Component: | util-linux | Assignee: | inger <inger> |
| Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P2 | CC: | boyarsh, glebfm, ldv, legion, php-coder, placeholder, vsu, vt |
| Version: | unstable | ||
| Hardware: | all | ||
| OS: | Linux | ||
flock работает в соответствии с документацией. Не вижу проблемы. В текущей документации такая особенность flock(1) явно не указана. Впрочем, в changelog util-linux 2.13-pre2 (http://freshmeat.net/projects/util-linux/?branch_id=11029&release_id=204182) написано следующее: - flock was replaced with flock-2.0.2 by H. Peter Anvin. ftp://ftp.kernel.org/pub/software/utils/script/flock/ (там уже лежит 2.0.3). У этого варианта flock опций побольше; в частности, есть и опция --close. Можно обновить flock или собрать flock отдельным пакетом. Обновлять весь util-linux существенно дольше. 2 Sergey Vlasov: поставил себе, попробовал, fully satisfied. Спасибо большое за подсказку. 2 Дмитрий: может переоткрыть с FR, чтобы не забыли? Ильдар Согласен, пусть напоминает. В git доступна сборка 2.12r-alt2.2, в которой flock(1) сбэкпорчен из версии 2.13-pre7 Прошу всех заинтересованных потестировать. -> http://git.altlinux.org/people/php_coder/packages/?p=util-linux.git;a=commitdiff;h=74028c22428b1da7c7db48c69a14c48d852ff9d8;hp=119ef3de0d3514e3167d7b8e4e02437c45344a7e Fixed in 2.12r-alt2.2 |
Проблема: flock открывает лок-файл, делает flock(2) на этот файл, потом fork-exec, после чего спокойно выходит, надеясь, что это осовободит лок, который он сделал на лок-файл. Однако это не так, если не все форки закончили свою работу. Постановка задачи: написать скрипт, запускающий pppd (или ещё что-нибудь), но который запрещал бы запуск второй копии самого себя. Предполагаемая реализация: через lock file и вызов /usr/bin/flock примерно так: .... touch $LOCKFILE if [ l$2 = lok ]; then main else flock --timeout=0 $LOCKFILE $0 $1 ok fi Steps to Reproduce: 1.touch lock 2.flock lock bash -c "sleep 60 &" 3.flock lock bash -c "sleep 60 &" Actual Results: command #3 exits only 60 seconds after command #2 was started Expected Results: immediately