Мне нужно обновить CGI Perl script, где пользователи должны выполнить 3 шага. После завершения каждого шага, script регистрирует, какой шаг пользователь выполнил. Имея запись об этом важно, чтобы мы могли доказать пользователю, что они только закончили первый шаг и не выполнили все три шага, например.
В настоящее время script создает 1 файл журнала для каждого экземпляра CGI script. Поэтому, если UserA выполнит шаг 1, то UserB выполнит шаг 1, затем шаг 2, затем шаг 3 - и затем UserA завершит шаг 2 и шаг 3, порядок файлов журнала будет.
LogFile.UserA.Step1
LogFile.UserB.Step1
LogFile.UserB.Step2
LogFile.UserB.Step3
LogFile.UserA.Step2
LogFile.UserA.Step3
Файлы журнала называются с текущей меткой времени, случайным числом и идентификатором процесса.
Это прекрасно работает, чтобы один и тот же файл не записывался более одного раза, но каталог быстро получает тысячи файлов (каждый файл содержит всего несколько байтов). Существует процесс повернуть и сжать эти журналы, но на меня напало, чтобы журнал script записывался только на один файл в день, чтобы уменьшить количество создаваемых файлов журнала.
В основном, файл журнала будет иметь текущую дату в имени файла, и в любое время, когда CGI script должен записываться в журнал, он будет прикрепляться к одному файлу журнала за этот день, независимо от пользователя или чего они включены.
Ничего не нужно читать файл журнала - единственное, что произойдет с ним, - это добавить CGI script. Вращение журнала будет выполняться в файлах журнала, которые составляют 7 дней или старше.
Мой вопрос: какой лучший способ обработать параллельные приложения к этому файлу журнала? Нужно ли блокировать его перед добавлением? Я нашел эту страницу в Perl Monks, которая, как представляется, указывает, что "когда несколько процессов записываются в один файл, и все они имеют открытый файл для добавления данные не должны быть перезаписаны."
Я узнал, что только потому, что это можно сделать, это не значит, что я должен, но в этом случае, что является самым безопасным, лучшим способом для этого?
Резюме:
- Параллельно добавляет к одному файлу
- Каждое добавление к файлу - это только одна строка, менее 50 символов
- Заказ не имеет значения
Спасибо!