Необходимо ли включить "atime" в /etc/fstab, чтобы получить правильное время последнего доступа в java?

Я могу получить время последнего доступа с помощью приведенного ниже кода.

public Date getLastAccessTime(String filePath) throws IOException {
    File f = new File(filePath);
    BasicFileAttributes basicFileAttributes = Files.getFileAttributeView(
        f.toPath(),
        BasicFileAttributeView.class).readAttributes();
    Date accessTime = new Date(basicFileAttributes.lastAccessTime().toMillis());
    return accessTime;
}

Но в моей системе linux он настроен как "relaytime" в /etc/fstab.

Необходимо ли включать "atime" в / etc / fstab, чтобы получить точное время последнего доступа?

1 ответ

Решение

Необходимо ли включать "atime" в /etc/fstab, чтобы получить точное время последнего доступа?

Краткий ответ: да

В Linux JDK использует sys_stat64() Системный вызов для получения информации о файле. Если ядро ​​не обновляет st_atime поле, когда файл доступен, то Java не может иметь эту информацию.

Поведение ядра Linux по умолчанию в отношении политики обновления st_atime было изменено в Linux 2.6.30. relatime теперь является поведением по умолчанию. Это означает, что st_atime обновляется только когда st_mtime или же st_ctime обновляется, но не при доступе к файлу. Если вы хотите старое поведение, вы можете использовать strictatime, См. Man-страницу mount для получения дополнительной информации (ищите atime, noatime, relatime, strictatime).

Другие вопросы по тегам