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