Проблема с дата-время модификации файла (win)
majorgleb 06.10.2015 16:42
Дано:
в корневом auto.p в @auto[] есть такое:
@auto[]
$filename[./${form:uuid}.txt]
$str[$form:test]
^str.save[$filename]
(на всякий случай обращу внимание, что $str и $filename как локальные переменные не были описаны; это скорее по лени, т.к. они нигде в коде далее не используются)
далее идет работа уже основного кода, который указанный файл не трогает, но занимает достаточно времени
параллельно с этой программой работает, вызываемая по cron, вторая программа, которая ожидает появления файлов типа <uuid>.txt и обрабатывает их. данная программа берет mdate (дату модификации) найденного txt-файла и пишет её в БД и обрабатывает txt-файл и переработанный файл помещает в каталог формата /год/месяц/день/ (полученные из mdate)
из нескольких десятков тысяч обработок был 1 "сбой": обработанный файл был помещен в /2015/07/26/, дата записана в БД как "2015-07-26 23:59:56" -- всё верно!, но когда я сейчас смотрю на дату модификации txt-файла - получется что она "2015-07-27 00:00:05". причем, дата создания файла "2015-07-26 23:59:56"
Предположение:
описаное выше, на мой взгляд, может быть только в случае, если Парсер физически закрывает все открытые файлы в момент завершения работы скрипта. т.е. файл, который был открыт и в него записали в строке "^str.save[$filename]", физически был закрыт не сразу, а только в момент, когда парсер отработал полностью весь код и уже планировал выгрузиться из памяти.
т.е. предполагаю было примерно так:
первая программа: в момент "^str.save[$filename]" был создан файл, его cdate и mdate были установлены равными как дата-время создания (26ое число).
далее вторая программа увидела файл, его обработала (поэтому сохраненная в БД дата-время совпадают с датой-время создания файла - они 26-ое число)
далее первая программа доработала (на это ей понадобилось секунд 10) и парсер стал всё закрывать и "чистить", в т.ч. провёл close того самого txt-файла. чем поменял mdate на более свежую (27-ое).
Вопросы:
1. верны ли предположения про закрытие текстовых файлов в момент окончания работы парсера, а не сразу по завершению метода .save[]?
2. если первое верно: есть ли какой-то способ сделать "flush" текстовым файлам (как это есть с hashfile) сразу? или этого можно добиться описав $str и $filename как локальные? или сделав memory:compact?
- Проблема с дата-время модификации файла (win), majorgleb 06.10.2015 16:42
- Ответ, moko [M] 06.10.2015 18:27
- Ответ, majorgleb 06.10.2015 18:35
- Ответ, G_Z [M] 06.10.2015 17:44
- Ответ, majorgleb 06.10.2015 16:52