test.sh
#!/bin/bash
echo "Hello World"
тест2.ш
#!/bin/bash
while true
do
sh test.sh >> /script_logs/test.log &
done
Я хочу реалізувати logrotate для контролю розміру файлу журналу, тож як реалізувати logrotate, якщо ситуація схожа на вище?
test.sh
#!/bin/bash
echo "Hello World"
тест2.ш
#!/bin/bash
while true
do
sh test.sh >> /script_logs/test.log &
done
Я хочу реалізувати logrotate для контролю розміру файлу журналу, тож як реалізувати logrotate, якщо ситуація схожа на вище?
Відповіді:
#!/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скрипт оболонки на source.debian.net/src/debianutils/4.7
savelogжодного з моїх ящиків RHEL / CentOS 5/6, тому я щойно завантажив його ad hoc, і, здається, він працює чудово для моїх потреб.
savelogє те, що він перейменовує файл, але потім потрібен тривалий час, щоб зібрати старі, перш ніж закінчити. Тим часом журнал .0 вже отримує записи наступного дня в ньому. В ідеалі час між обертанням журналу та сигналізацією процесу відновлення журналу повинен бути мінімальним. Я відключу функцію savelogстиснення через це.
Я написав логроте в ці вихідні. Я, мабуть, не хотів би, якби прочитав чудову відповідь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