Ответы:
#!/bin/bash
touch /script_logs/test.log
MaxFileSize=2048
while true
do
sh test.sh >> /script_logs/test.log
#Get size in bytes**
file_size=`du -b /script_logs/test.log | tr -s '\t' ' ' | cut -d' ' -f1`
if [ $file_size -gt $MaxFileSize ];then
timestamp=`date +%s`
mv /script_logs/test.log /script_logs/test.log.$timestamp
touch /script_logs/test.log
fi
done
Я удалил «&», так как это может вызвать проблему.
cp
и mv
, могу ли я удалить файл журнала, затем будет ли он новый файл журнала с тем же именем? (Мое требование: если файл журнала достигнет определенного предела, я хочу удалить этот файл журнала, а затем создать новый файл )
>>
чтобы добавить к файлу журнала, >
будет перезаписывать его снова и снова.
>
, я получаю tail: test.log: file truncated Hello World!
.... Если я использую >>
, я получаю правильное сообщение журнала, но размер файла увеличивается. Нет условия проверки состояния ...
как насчет использования savelog
?
Он доступен в Debian и RH, и почти во всех остальных дистрибутивах Linux, о которых я знаю. Это скрипт оболочки / bin / sh, поэтому должен работать и на любом другом Unix.
например, прежде чем писать что-либо для test.log
запуска savelog -n -c 7 test.log
. Это сохранит 7 самых последних непустых версий test.log. По умолчанию он сжимает повернутые логи (но это можно отключить с помощью -l
).
Если вам нужно, вы можете проверить размер test.log
и только savelog
его, если он превышает определенный размер.
/usr/bin/savelog
скрипт на sources.debian.net/src/debianutils/4.7
savelog
ни в одном из своих RHEL / CentOS 5/6 ящиков, поэтому я только что скачал его ad hoc, и, похоже, он отлично работает для моих нужд.
savelog
является то, что он переименовывает файл, но затем занимает много времени, чтобы сжать старые, прежде чем закончить. Между тем журнал .0 уже получает записи следующих дней. В идеале время между ротацией журнала и сигналом процесса повторного открытия журнала должно быть минимальным. Из-за этого я отключаю функцию savelog
сжатия.
Я написал logrotee в эти выходные. Я бы не стал, если бы прочитал замечательный ответmultilog
@ JdeBP .
Я сосредоточился на том, чтобы он был легким и имел возможность bzip2 его выходных блоков, таких как:
verbosecommand | logrotee \
--compress "bzip2 {}" --compress-suffix .bz2 \
/var/log/verbosecommand.log
Однако многое еще предстоит сделать и проверить.
Поскольку я пока не могу добавить комментарии к принятому ответу , подсказка BusyBox , где du
нет -b
флага:
du /var/log/file | tr -s '\t' ' ' | cut -d' ' -f1