[Comm] Зеркалирование по расписанию.
Vladimir Karpinsky
=?iso-8859-1?q?vkarpinsky_=CE=C1_mail=2Eru?=
Пн Мар 23 09:55:49 MSK 2009
Здравствуйте!
Yura Kalinichenko пишет:
> Vladimir Karpinsky пишет:
>> Yura Kalinichenko пишет:
>>>> Насколько я понял, --- понял ещё не всё, разбираюсь, --- это не
>>>> совсем то. У меня проблема такая: по крону раз в 15 минут
>>>> запускается скрипт, пытающийся достучаться до удалённого ресурса и
>>>> скачать оттуда данные. Связь, даже когда она есть, терпимая, хуже
>>>> другое: 20 часов из 24 нет там нет электричества. Скрипт без связи
>>>> отваливается, лок-файл удаляется, всё хорошо. Мне надо отследить
>>>> момент, когда связь есть, и уже происходит перекачка данных, а тут
>>>> подходит время следующего запуска скрипта: возможны разные
>>>> неприятности при одновременной закачке, поэтому повторный скрипт
>>>> должен обнаружить блокировку и просто отвалится, не трогая её.
>>> Так это и происходит, когда используете для блокировки функцию
>>> test_lock. Плюс проверяется - существует ли еще процесс, создавший
>>> блокировку, и если нет (напр. был убит по kill -9) - блокировка
>>> перехватывается.
>>
>> Я прошу прощения, а что такое kill -0? kill -l про сигнал 0 молчит...
> Ну это в общем-то классика. Этот псевдосигнал используется для проверки
> существования процесса. Вот что говорит, к примеру, info kill:
Спасибо! Странно, что нет ни в man, ни в kill -l.
>> Я до конца не понимаю смысл цикла until: ставится запрет на перезапись
>> существующего файла и дальше зацикливаемся в попытке его перезаписать.
>> Далее, если kill -0 успешен,
> Т.е. лок выставлен, и процесс, его создавший, активен
>> то удалять лок-файл не надо, ждём, что он процессе счёта до 10 сам
>> уйдёт (?)
> Т.е. ожидаем (если нужно) что процесс, заблокировавший ресурс,
> завершится сам и тогда мы выставим свою блокировку и начнем свою обработку.
>> или мы его убьём в следующей итерации until.
> Не его - себя. Если за определенное время процесс, ранее заблокировавший
> ресурс, его не освободил - обычно ждать далее не имеет смысла, и мы
> выходим в расчете на следующий запуск. Хотя иногда (но не в вашей
> ситуации) может иметь смысл ожидать до победного конца.
Понял, вроде.
>> Полностью согласен, но мои эксперименты с выдёргиванием сетевого шнура
>> из компьютера, с котрого уже качает wget, показал, что wget не
>> отваливается, несмотря на наличие таймаутов.
> Странно. Только что проверил: wget --timeout=3 -c 'http://...'
> благополучно разрывается через 3 сек. после выдергивания шнура либо
> укладывания интерфейса.
Попробую ещё раз на днях... Ставил ключи -t 5 -T 5: т.е. 5 попыток по 5
секунд. У меня не отваливался wget, только если сеть рвалась уже имеено
в момент закачки. Во всех остальных случаях (подключение, получение
списка и т.п.) всё отваливалось нормально.
--
С уважением,
Владимир.
Подробная информация о списке рассылки community