як реалізувати logrotate в оболонці сценарію


12

test.sh

#!/bin/bash
echo "Hello World"

тест2.ш

#!/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, чи можу я видалити файл журналу, чи буде він новий файл журналу з таким самим ім'ям? (Моя вимога: якщо файл журналу досягнуто певної межі, я хочу видалити цей файл журналу, а потім створити новий файл )
Верендра Какуману

Ви повинні використовувати >>для додавання до журналу файл, >буде перезаписувати його знову і знову.
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)? Встановлення за замовчуванням не має журналу збереження. Я не можу його знайти у yum, використовуючи
репост

savelog не знайдено в RHEL 5. Чи знаєте ви, в якому репо-файлі він повинен бути?
Феліпе Альварес

Поняття про упаковку centos або rhel5 не маю, але ви можете знайти /usr/bin/savelogскрипт оболонки на source.debian.net/src/debianutils/4.7
cas

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

Одним із мінусів savelogє те, що він перейменовує файл, але потім потрібен тривалий час, щоб зібрати старі, перш ніж закінчити. Тим часом журнал .0 вже отримує записи наступного дня в ньому. В ідеалі час між обертанням журналу та сигналізацією процесу відновлення журналу повинен бути мінімальним. Я відключу функцію savelogстиснення через це.
rustyx

2

Я написав логроте в ці вихідні. Я, мабуть, не хотів би, якби прочитав чудову відповідь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.