Есть ли у python хуки в EXT3

У нас есть несколько заданий cron, которые регистрируют ftp-прокси на централизованном сервере. Эти файлы могут быть довольно большими, и их передача может занять некоторое время. Частью требований этого проекта является предоставление механизма ведения журнала, в котором мы регистрируем успех или неудачу этих передач. Это достаточно просто.

Мой вопрос: есть ли способ проверить, записывается ли файл в данный момент? Мое первое решение состояло в том, чтобы просто проверить размер файла дважды в течение заданного периода времени и проверить размер файла. Но коллега сказал, что может быть возможность подключиться к файловой системе EXT3 через python и проверить атрибуты, чтобы увидеть, добавляется ли файл в данный момент. Мой Google-Fu оказался пустым.

Есть ли модуль для EXT3 или что-то еще, что позволило бы мне проверить состояние файла? Сервер работает под управлением Fedora Core 9 с файловой системой EXT3.


person OhioDude    schedule 02.07.2009    source источник


Ответы (2)


нет необходимости в хуках, специфичных для ext3; просто проверьте lsof, или, точнее, /proc/<pid>/fd/* и /proc/<pid>/fdinfo/* (вот откуда lsof получает информацию, AFAICT). Там вы можете проверить, открыт ли файл, доступен ли он для записи и положение «курсора».

Это не вся картина; но больше делается в процессе процесса с помощью stdlib в процессе записи, так как большинство операций записи буферизуются, а ядро ​​​​видит только большие фрагменты данных, поэтому любой монитор, поддерживающий ext3, также не получит этого.

person Javier    schedule 02.07.2009
comment
Вау, мой Linux-Fu сегодня выключен, никогда не думал о том, чтобы пойти по этому пути. Спасибо за ответ! - person OhioDude; 02.07.2009

Там нет хуков ext3, чтобы проверить, что вы хотите напрямую.

  • Я полагаю, вы могли бы покопаться в исходном коде команды Fuser linux. , реплицируйте часть, которая определяет, какому процессу принадлежит файл, и наблюдайте за этим ресурсом. Когда файл больше никто не открывает, его передача завершена.

Другой подход:

  • Ваши задания cron должны сказать, что они завершены.

У нас есть задания cron, которые передают файлы, просто записывая пустое filename.finished после передачи filename. Другой подход - перенести их во временное имя файла, например. filename.part, а затем переименуйте его в filename Переименование атомарно. В обоих случаях вы проверяете несколько раз, пока не найдете filename или filename.finished.

person nos    schedule 02.07.2009
comment
если копия во временную, то стратегия переименования возможна, непременно к ней. его гораздо легче проверить, легче очистить, он мягче с «моментальными снимками» на основе жестких ссылок (например, rsnapshot) и с гораздо меньшей вероятностью испортит файловую систему даже в случае катастрофического аппаратного сбоя. - person Javier; 02.07.2009