Мои PHP-скрипты генерируют файлы журналов, и я пытаюсь использовать logrotate для управления ими.
Файл /etc/logrotate.d/php-logs
:
/srv/cache/*.log {
daily
notifempty
size 800K
rotate 5
missingok
compress
delaycompress
}
Это работает, за исключением той части, в которой иногда процесс ротации журналов совпадает с попыткой PHP добавить журнал.
Каков наилучший способ решить эту проблему?
Между тем мое решение (бандаж) сделано в 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.
}
}
Существует некоторый журнал, поворачивают опции, которые могли бы помочь. Посмотрите copytruncate в http://www.linuxcommand.org/man_pages/logrotate8.html , Это создаст копию и усечет исходный файл. Поэтому файл журнала не должен быть закрыт, и он содержал открытый Вашим сценарием PHP. Некоторые операторы журнала могли бы быть отброшены между копией и усеченной операцией.
sudo ./install.sh
..., и это попросит у Вас Вашего sudo пароля
– pdc
11 November 2017 в 08:17