Как реализовать Logrotate в сценарии оболочки


12

test.sh

#!/bin/bash
echo "Hello World"

test2.sh

#!/bin/bash
while true
do
    sh test.sh >> /script_logs/test.log &
done

Я хочу реализовать logrotate для управления размером файла журнала, так как же реализовать logrotate, если ситуация похожа на описанную выше?

Ответы:


11
#!/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

Я удалил «&», так как это может вызвать проблему.


@Veerendra, нам нужно поместить логику сворачивания бревен внутри цикла, когда вы выполняете бесконечный цикл ..
— любопытно

@Veerendra у нас в предыдущем посте была ошибка .. "mv" не создаст новый файл, но вы можете изменить скрипт в соответствии с вашими требованиями.
— любопытно

Итак, вместо cpи mv, могу ли я удалить файл журнала, затем будет ли он новый файл журнала с тем же именем? (Мое требование: если файл журнала достигнет определенного предела, я хочу удалить этот файл журнала, а затем создать новый файл )
— Veerendra

Вы должны использовать, >>чтобы добавить к файлу журнала, >будет перезаписывать его снова и снова.
— Alcik

если я использую >, я получаю tail: test.log: file truncated Hello World!.... Если я использую >>, я получаю правильное сообщение журнала, но размер файла увеличивается. Нет условия проверки состояния ...
— ;-(

24

как насчет использования savelog?

Он доступен в Debian и RH, и почти во всех остальных дистрибутивах Linux, о которых я знаю. Это скрипт оболочки / bin / sh, поэтому должен работать и на любом другом Unix.

например, прежде чем писать что-либо для test.logзапуска savelog -n -c 7 test.log. Это сохранит 7 самых последних непустых версий test.log. По умолчанию он сжимает повернутые логи (но это можно отключить с помощью -l).

Если вам нужно, вы можете проверить размер test.logи только savelogего, если он превышает определенный размер.


Любая идея, какой пакет содержит это на AWS Linux (я думаю, близко к CentOS)? Установка по умолчанию не имеет savelog. Я не могу найти его из yum, используя репозитории по умолчанию
— jhonkola 25.02.16

savelog не найден в RHEL 5. Знаете ли вы, в каком репо он должен быть?
— Фелипе Альварес

ни малейшего представления о CentOS или RHEL5 упаковки, но вы можете найти /usr/bin/savelogскрипт на sources.debian.net/src/debianutils/4.7
— КАС

2
Я не нашел savelogни в одном из своих RHEL / CentOS 5/6 ящиков, поэтому я только что скачал его ad hoc, и, похоже, он отлично работает для моих нужд.
— Дейл Андерсон

Недостатком savelogявляется то, что он переименовывает файл, но затем занимает много времени, чтобы сжать старые, прежде чем закончить. Между тем журнал .0 уже получает записи следующих дней. В идеале время между ротацией журнала и сигналом процесса повторного открытия журнала должно быть минимальным. Из-за этого я отключаю функцию savelogсжатия.
— rustyx

2

Я написал logrotee в эти выходные. Я бы не стал, если бы прочитал замечательный ответmultilog @ JdeBP .

Я сосредоточился на том, чтобы он был легким и имел возможность bzip2 его выходных блоков, таких как:

verbosecommand | logrotee \
  --compress "bzip2 {}" --compress-suffix .bz2 \
  /var/log/verbosecommand.log

Однако многое еще предстоит сделать и проверить.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.