Необходимо ли включить "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
).