Ограничить размер файла журнала

Я установил некоторое программное обеспечение и попробовал несколько вещей

Я предполагаю, что вы не использовали постоянный Live CD.

В этом случае после перезапуска все, что вы сделали, исчезнет.

могу ли я купить себе новый SSD и установить / перенести на него свой YUMI USB Ubuntu

Конечно. ИЛИ , вы можете установить и использовать GParted (возможно, уже есть) и создать раздел рядом с Windows для установки Ubuntu (или другого дистрибутива Linux по вашему выбору)

1
18.11.2016, 00:55
1 ответ

Отказ от буферизации.

Во-первых, возможна буферизация; по умолчанию вывод в not-terminal-not-standard-error буферизируется по блокам (согласно setvbuf (3) ), поэтому не следует ожидать появления каких-либо журналов до тех пор, пока буфер не будет заполнен (или вообще не будет, когда что-то вылетает или съедает фатальный сигнал). Это лучше всего протестировать с двумя терминалами, один для выполнения команд, а другой для tail -f выходной файл:

# terminal watcher (how do the log lines appear in the logfile?)
rm logf; touch logf; tail -f logf

# terminal test commands (feed logfile)
php -r 'while(1){echo "logline\n";sleep(1);}' >> logf
...
^C
perl -E 'while(1){say "logline";sleep 1}' >> logf
...
^C

Из этого видно (по крайней мере, в моей системе), что PHP не блокирует выход стандартного буфера, отклонение от дефолта; однако head выполняет буферизацию, а stdbuf не помогает, так как все строки журнала появляются в сгустке:

php -r 'while(1){echo "logline\n";sleep(1);}' | head -7 >> logf
php -r 'while(1){echo "logline\n";sleep(1);}' | stdbuf -o 0 -- head -7 >> logf

Итак, head , вероятно, неправильный инструмент для этой задачи. (Кстати, различные приложения будут буферизоваться внутри, поэтому любые ужасные действия stdbuf могут не помочь:

stdbuf -o 0 perl -E 'while(1){say "logline";sleep 1}' >> logf
perl -E 'STDOUT->autoflush;while(1){say "logline";sleep 1}' >> logf

Если это вообще возможно, установите соответствующую буферизацию в самом приложении.)

Что касается журналов

Жесткое ограничение на количество строк журнала потребует чего-то, что потребляет N строк, но затем остается открытым (или приложение затем будет убито, или ...?):

php -r 'while(1){echo "logline\n";sleep(1);}' 2>&1 \
| perl -ne 'BEGIN{STDOUT->autoflush; $N=7 } if($N>0){print;$N--}' >> logf

Или это можно было бы сделать внутренне с помощью PHP, предполагая, что все журналы могут быть маршрутизированы через функцию для обработки этой задачи или модуль или фреймворк ведения журнала. В противном случае есть набор инструментов, которые регистрируют ротацию стандартных , с различными уровнями опций и задействованных кривых обучения, хотя в них, похоже, не хватает «N строк» ​​и вместо этого устанавливаются ограничения в зависимости от размера.

1
27.01.2020, 23:46

Теги

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