[Comm] Зеркалирование по расписанию.
Yura Kalinichenko
=?iso-8859-1?q?yuk_=CE=C1_kalina=2Ein=2Eua?=
Вс Мар 22 00:57:26 MSK 2009
Vladimir Karpinsky пишет:
> Здравствуйте!
>
> Alexey Borovskoy пишет:
>> * Среда 10 декабря 2008 Vladimir Karpinsky
>>
>> --кусь--
>>
>> #!/bin/bash
>>
>> exit_handler() {
>> trap - EXIT
>> [ -f "$LOCK_FILE" ] && rm -f "$LOCK_FILE"
>> }
>>
>> trap exit_handler HUP PIPE INT QUIT TERM EXIT
>>
>> date> "$LOCK_FILE"
>>
>> --кусь--
>>
>> Логику дописать по вкусу
>
> Логику дописал, уже работает пару месяцев, но сегодня углядел
> проблемы: если на скрипт, содержащий вышележащий кусок натравить kill
> -9, то lock-файл не уничтожается. Можно ли как-то такой вариант учесть.
>
> Второй момент: я запускаю этот же скрипт второй раз при наличии
> lock-файла, он обнаруживает lock-файл, ничего не делает и выходит с
> ненулевым кодом. Всё казалось бы хорошо. Но: он выходит-то по команде
> exit и автоматом убивает lock-файл, т.е. при третьем запуске скрипта
> уже lock-файл не будет найден, и скрипт будет пытаться работать, чего
> бы не хотелось. Не могу сообразить, как это обойти.
>
Обычно блокировки выполняются несколько другим образом. Вот пример,
надеюсь, достаточно понятно, что ваших проблем здесь не будет:
---------------------------cut-----------------------------
USE_LOCK=yes
LOCKDIR=/tmp
LOCKFILE=test.pid
mypid=$$
test_lock() {
LOCK_LOOP_COUNT=10
test "$USE_LOCK" \!= "yes" && return 0
set -o noclobber
until echo $mypid > $LOCKDIR/$LOCKFILE ; do
kill -0 `cat $LOCKDIR/$LOCKFILE` || rm -f $LOCKDIR/$LOCKFILE
if [ -f "$LOCKDIR/$LOCKFILE" ]; then
echo "Locking ($LOCK_LOOP_COUNT)..."
let LOCK_LOOP_COUNT--
if [ $LOCK_LOOP_COUNT -eq 0 ]; then
break
else
sleep 1
fi
else
echo "Remove stalled lock"
fi
done
set +o noclobber
if [ $LOCK_LOOP_COUNT -eq 0 ]; then
return 1
else
return 0
fi
}
test_unlock() {
test -f $LOCKDIR/$LOCKFILE -a $mypid -eq `cat $LOCKDIR/$LOCKFILE` && rm -f $LOCKDIR/$LOCKFILE
return $?
}
---------------------------cut-----------------------------
--
SY,
Yura Kalinichenko
Подробная информация о списке рассылки community