Могут ли logrotate терпеть условия гонки?

У меня есть приложение PHP, которое может генерировать довольно много информации журнала. Я хотел бы использовать logrotate, чтобы убедиться, что эти журналы не выходят из-под контроля.

Однако меня беспокоят условия гонки. Может ли быть потеря сообщений журнала, если PHP находится в середине записи в журнал, когда logrotate определяет, что ему необходимо повернуть этот журнал, как в последовательности событий ниже? Если нет, то почему?

PHP открывает файл журнала для записи. PHP пишет строку. logrotate решает, что файл журнала должен быть повернут. PHP пишет другую строку. PHP закрывает файловый ресурс.

Использует ли PHP file_put_contents, например, какую-либо разницу?

Особенности среды:

Я использую php5-fpm (Version: 5.5.9+dfsg-1ubuntu4.6) за сервером nginx на

Моя предложенная конфигурация logrotate (я еще ничего не установил) будет что-то вроде этого (в /etc/logrotate.d/my-app):

/var/my-app-data/logs/*.log {
    missingok
    notifempty
    weekly
    size 20M
    rotate 4
}

Несколько примеров моего регистрационного кода PHP:

$res = file_put_contents('/var/my-app-data/logs/general.log', date('[d/m/Y H:i:s]') . ' Something noteworthy has happened!' . "\n", FILE_APPEND);

Возможно, мы захотим использовать что-то вроде кода ниже в будущем:

$fp = fopen('/var/my-app-data/logs/general.log', 'a');
fwrite($fp, date('[d/m/Y H:i:s]') . ' Starting process...' . "\n");
// ...
fwrite($fp, date('[d/m/Y H:i:s]') . ' Something happened!' . "\n");
// ...
fwrite($fp, date('[d/m/Y H:i:s]') . ' Something happened!' . "\n");
// ...
fwrite($fp, date('[d/m/Y H:i:s]') . ' End of process.' . "\n");
fclose($fp);
1
задан 19 March 2015 в 14:49

0 ответов

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

Похожие вопросы: