Если Вы используете именованные каналы, то не имеет значения, если у Вас есть дочерние и родительские процессы:
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
Используйте logrotate
, он вращает ваши журналы и сжимает их для вас, если вы хотите. Скорее всего, он уже будет запущен в вашей системе, поэтому создайте файл в файле /etc/logrotate.d, чтобы сообщить logrotate, как обращаться с вашими журналами. Проверьте man-файл на предмет спецификаций....
Я рассматриваю возможность создания задания cron, которое будет выполняться раз в месяц и удалять самые старые символы (самые близкие к верху) из каждого лог-файла, делая каждые 100 мега меньше по размеру.
С этой методикой могут возникнуть некоторые проблемы, поэтому сначала убедитесь, что процесс протоколирования в порядке и продолжает протоколироваться, когда вы редактируете файл таким образом. Если он держит файловую рукоятку открытой, это, вероятно, плохая идея.
Обычным способом управления логами является logrotate
, но обратите внимание, что и с этим тоже есть потенциальные проблемы - некоторые приложения будут плохо реагировать на смену лог-файлов. На самом деле системный логер попадает в эту категорию, и для повторного открытия нового лога необходимо сигнализировать о его ротации.
Похожая опция, позволяющая избежать прерывания процесса, если он может записать в журнал стандартный вывод или стандартную ошибку, заключается в использовании pipelog. Трубный журнал выступает в качестве посредника в процессе и в файле журнала, так что вы можете сигнализировать ему, чтобы он вращался или удалял журнал, не прерывая и не мешая чему-либо:
> someprocess | pipelog someprocess.logfile &
[pipelog 5334] Using 'someprocess.logfile' as a log file.
Затем вы можете вращать журнал, отправив трубный журнал SIGUSR1: kill -s USR1 5334
, или удалить его и запустить новый с помощью SIGUSR2.