У меня есть приложение, которое распаковывает архив в / tmp, восстанавливая время модификации и доступа извлеченных файлов. Иногда этим файлам и прилагаемому архиву много лет. После извлечения файлов (иногда через несколько минут или часов) программное обеспечение для распаковки выборочно использует / изменяет некоторые файлы. Как только это будет сделано, приложение удалит извлеченные файлы / дерево. Эта операция может происходить в любое время дня (например, иногда, когда tmpwatch запускается cron).
Время от времени приложение нервничает, потому что не может найти файл, который, как ему известно, недавно был распакован. Я думаю, что происходит то, что tmpwatch спускается в распакованное дерево после того, как atime / mtime настроено (распаковкой или tar, управляемым приложением) в далекое прошлое, но до того, как приложение сможет получить доступ к соответствующему файлу. Поскольку tmpwatch по умолчанию просматривает время, он считает файл устаревшим и удаляет его.
Возможно, распаковка могла быть произведена в другом месте, или приложение могло использовать соответствующие флаги, чтобы не сбрасывать временные метки в прошлое. Однако ни один из этих подходов не является жизнеспособным по разным причинам.
Я думаю, что смогу изменить сценарий cron tmpwatch, чтобы учесть все это (и принять наиболее консервативное решение относительно удаления файлов), указав аргумент --ctime, а также --mtime (и ранее подразумеваемое - -время). Я немного смущен термином «максимум из этих времен», используемым на странице руководства tmpwatch - мое первоначальное чтение (пока я не посмотрел на исходный код C и не подумал иначе) заключалось в том, что потребовалось максимальное количество различий ( это означает, что он был более либеральным в удалении вещей). Означает ли это на самом деле «последний из этих времен» (и, таким образом, tmpwatch оставит в покое файлы, которые были только что распакованы, поскольку их индексный дескриптор был недавно затронут)?
Я бы сказал - попробуйте. touch /tmp/test.dat
может меняться каждый раз, когда вам нравится (как root). Посмотрите, tmpwatch (который также можно вызывать из командной строки) ведет себя так, как вы этого ожидаете.
Другой альтернативой может быть полное отключение tmpwatch.