Назад | Перейти на главную страницу

«Выхват и сохранение» версий файла, которые многократно перезаписываются

В системе, над которой я работаю, есть несколько процессов, которые иногда записывают определенный файл (мы можем рассматривать его как своего рода журнал, хотя это не совсем так). К сожалению, все они пишут в тем же выходной файл, т.е. его перезаписывают; и я не могу контролировать это их поведение. Предположим для обсуждения, что записи не пересекаются и нет никаких рас; и даже то, что между записями есть по крайней мере немного времени, чтобы что-то можно было сделать с файлом.

Теперь я хочу сохранить все версии этого файла, за неимением лучшего слова. По сути, я хочу «вырвать» копию всякий раз, когда произошла запись, и сохранить ее в другом месте с разумным дополнительным идентификатором (например, время начала записи, индекс версии или что-то еще).

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

Во-вторых, если предположить, что я должен реализовать это сам - как мне «зацепить» себя за открываемый и закрываемый файл? Я не хочу опрашивать fuser даже 1/4 секунды - это кажется чрезмерным. Или - возможно, есть другой подход, который вы бы порекомендовали сделать?

Крючок, который вы ищете, называется inotify.

Это подсистема Linux, предназначенная для отслеживания событий файловой системы, представленная около 15 лет назад (она не нова). Хорошим местом для начала было бы inotify-tools вики.