Использование logrotate для управления журналами, сгенерированными PHP

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

Файл /etc/logrotate.d/php-logs:

/srv/cache/*.log {
  daily
  notifempty
  size 800K
  rotate 5
  missingok
  compress
  delaycompress
}

Это работает, за исключением той части, в которой иногда процесс ротации журналов совпадает с попыткой PHP добавить журнал.

Каков наилучший способ решить эту проблему?

2
задан 23 June 2016 в 18:40

2 ответа

Между тем мое решение (бандаж) сделано в PHP, но я понимаю, что это не может быть самое надлежащее или изящное.

<?php
function log_record($str, $file_name) {
    $n = 0;
    while ($n < 10) {
        if (is_readable($file_name)) {
            file_put_contents($file_name, str_pad($_SERVER["REMOTE_ADDR"], 15, ' ', STR_PAD_RIGHT).' ['.date("Y-m-d H:i:s").'] '. $str . PHP_EOL, FILE_APPEND | LOCK_EX);
            exit;
        }
        usleep(10000); // That's 10 ms, up to 10 times.
    }
}
1
ответ дан 23 June 2016 в 18:40
  • 1
    Спасибо.. Это было соединено и обнаружено, но когда я даю страницу для печати, это не делает задания, на самом деле, когда я даю печать из своих окон, это хочет пароль и идентификатор для печати, которую нам дают от института. – Ding Dong 11 November 2017 в 18:00

Существует некоторый журнал, поворачивают опции, которые могли бы помочь. Посмотрите copytruncate в http://www.linuxcommand.org/man_pages/logrotate8.html , Это создаст копию и усечет исходный файл. Поэтому файл журнала не должен быть закрыт, и он содержал открытый Вашим сценарием PHP. Некоторые операторы журнала могли бы быть отброшены между копией и усеченной операцией.

0
ответ дан 23 June 2016 в 18:40
  • 1
    тогда используйте sudo ./install.sh..., и это попросит у Вас Вашего sudo пароля – pdc 11 November 2017 в 08:17

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

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