Ограничьте текстовый файл 100 МБ

Если Вы используете именованные каналы, то не имеет значения, если у Вас есть дочерние и родительские процессы:

p1:

#!/bin/sh
# p1

rm -f p1.fifo;mkfifo p1.fifo
trap "exit 1"  0 1 2 3 13 15

while read line; do
    echo p1 got "$line"
    echo p1 sending $line to p2
    echo $line > p2.fifo
    sleep 1
done < p1.fifo

p2:

#!/bin/sh
# p2

rm -f p2.fifo;mkfifo p2.fifo
trap "exit 1"  0 1 2 3 13 15

while read line; do
    echo p2 got "$line"
    echo p2 sending $line to p1
    echo $line > p1.fifo
    sleep 1
done < p2.fifo

сообщение inital:

echo message > p1.fifo

вывод p1:

p1 got message
p1 sending message to p2
p1 got message
p1 sending message to p2

вывод p2:

p2 got message
p2 sending message to p1
p2 got message
p2 sending message to p1
p2 got message
2
01.07.2014, 18:59
3 ответа

Используйте logrotate , он вращает ваши журналы и сжимает их для вас, если вы хотите. Скорее всего, он уже будет запущен в вашей системе, поэтому создайте файл в файле /etc/logrotate.d, чтобы сообщить logrotate, как обращаться с вашими журналами. Проверьте man-файл на предмет спецификаций....

2
27.01.2020, 22:00

Я рассматриваю возможность создания задания cron, которое будет выполняться раз в месяц и удалять самые старые символы (самые близкие к верху) из каждого лог-файла, делая каждые 100 мега меньше по размеру.

С этой методикой могут возникнуть некоторые проблемы, поэтому сначала убедитесь, что процесс протоколирования в порядке и продолжает протоколироваться, когда вы редактируете файл таким образом. Если он держит файловую рукоятку открытой, это, вероятно, плохая идея.

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

Похожая опция, позволяющая избежать прерывания процесса, если он может записать в журнал стандартный вывод или стандартную ошибку, заключается в использовании pipelog. Трубный журнал выступает в качестве посредника в процессе и в файле журнала, так что вы можете сигнализировать ему, чтобы он вращался или удалял журнал, не прерывая и не мешая чему-либо:

> someprocess | pipelog someprocess.logfile &
[pipelog 5334] Using 'someprocess.logfile' as a log file.

Затем вы можете вращать журнал, отправив трубный журнал SIGUSR1: kill -s USR1 5334, или удалить его и запустить новый с помощью SIGUSR2.

3
27.01.2020, 22:00

man split поможет вам. Особенно флаг -b .

-1
27.01.2020, 22:00

Теги

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