• ? tech ipc concur Задаченька на прыще-ipc. Есть множество процессов-воркеров на одном хосте. Периодически в случайно выбранном из них запускается кот. Кот может работать дольше интервала запуска следующего кота (как cron), соотв. нужно предотвратить запуск следующего кота. Процесс с котом может быть жёстко ассасинирован в любой момент, например, oom-killer'ом. Соотв., нужно нечто, чистящееся ведром автоматически при таком раскладе.
    Открывать на слушанье сокет это совсем быдло-вей. open("/tmp/lockfile", ... | O_EXLOCK)? Подводные камни (кроме вероятности удаления этого файла извне — её можно проигнорить)? Что-нибудь ещё?
    На картинке кот по запросу "acne cat".

Replies (3)

  • @fillest, А кот всегда один? Тогда единственный подводный камень локфайла — как его удалять, если кот убьётся сам. А при нормальном выходе сам его чистит.
  • @kapsh, кот единообразен и доступен, но не совсем один — это celery-periodic-таски (собсно их и думаю оборачивать в лок). Кот на пейстоне, поэтому он или гарантированно разлочится при ошибке, или упадёт изза какого-нибудь сишного сегфолта. Ведро вроде как умеет снимать лок автоматически при смерти процесса (именно лок, а не сам файл, сам файл можно не выпиливать).
    Олсо, O_EXLOCK это оказалось бсдшное, на прыщиксе надо как-то по-другому — нашел вот flock, один пацанчик протестил, грит "малаца". Ща попробую, но вопрос ещё открыт.