Премини към съдържанието
От 1-ви септември 2021 г., вход във форумите ще е възможен само с имейл адрес вместо потребителско име. Ако не помните имейла с който сте се регистрирали, вижте го в настройките на профила си. ×
  • Добре дошли!

    Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

    Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

     

daily rotate catalina.out


Interstellar

Препоръчан отговор


Здравейте,

 

Имам малък проблем, понеже файла catalina.out с времето става прекалено голям, а това затруднява преглеждането му и т.н., реших да си направя в /etc/logrotate.d/ скрипт, който всеки ден да прави нов catalina.out.%date. Скрипта изглежда така:

/path/to/catalina.out{
copytruncate
daily
missingok
dateext
dateformat %Y-%m-%d
}

Проблемите ми са следните, понеже през деня си пише в catalina.out, когато прехвърли лога за деня, става така, че примерно в лога за 16.11.2014 реално е лога от 15.11.2014, как да оправя това?
Също вторият проблем е, че дейли крона е настроен да минава в 02:00 през нощта, как да променя само този скрипт да минава в 00:00? Гледах из нета и един от вариантите е да се добави в /etc/crontab

0 0 * * * root /etc/logrotate.d/scriptName

Надявам се, че ме разбрахте, ще съм благодарен ако някой удари рамо да оправи това :)

Поздрави

Линк към коментара
Сподели в други сайтове

Ако просто искате да триете този файл всеки ден, може просто да използвате един crontab за целта.

 

Пример за всеки ден

crontab -e

След това поставете вътре следното:

0 0 * * *  echo > /path/to/catalina.out

Така всеки ден ще се трие и презаписва на ново файла, без да се увеличава по размер със стари логове.

 

Не е най елегантното решение, но работи ;)

Линк към коментара
Сподели в други сайтове

Ако просто искате да триете този файл всеки ден, може просто да използвате един crontab за целта.

 

Пример за всеки ден

crontab -e

След това поставете вътре следното:

0 0 * * *  echo > /path/to/catalina.out

Така всеки ден ще се трие и презаписва на ново файла, без да се увеличава по размер със стари логове.

 

Не е най елегантното решение, но работи ;)

 

Не иска да го трие, а да го logrotate, но с дата. Въпроса е, че човека не е решил как точно да го направи според мен. Дали да ползва чист cron със скрипт или да смени часа на минаването на logrotate. Малко не виждам смисъл хем да го прави с logrotate хем да го го пуска с cron ... ама той си знае. Освен това ако го пуска в 0:00 датата пак ще е утрешна, та по-добре да го пуска в 23:59 :)

Линк към коментара
Сподели в други сайтове

Здравейте,

 

Идеята е да се направи примерно както се пишат някои логове на apache(apache.17-11-2014.log) и т.н. всеки ден да си прави нов лог за catalina.out същият формат(catalina.17-11-2014.out).
Не искам да трия лога, а искам да е по-лесно преглеждането му, като за всеки ден си е отделен catalina.%date.out.

С текущата конфигурация която съм написал в първия пост, съм и описал двата проблема които има текущата конфигурация(също пази само за 4-5 дни назад, но видях как се оправя това).

Идеята е как да се промени текущата конфигурация, че да се избегат тези 2 часа, които отиват в лога за следващия ден (мисля, че ако това се оправи, ще се оправи и другия проблем с данните, че в лога за 18, са данните за 17, защото лога реално като се прави в 2 през нощта, в скрипта датата се взима от текущото състояние на системата, а реално вече е минало 23:59 и е следващия ден).
Този logrotate предполагам се изпълнява daily по същото време, когато се изпълнява и cron daily(реално cron daily го изпълнява?)
За това си мисля, че начина е да се промени часа за изпълнение на cron daily на 23.59, който се задава в този файл:

/etc/crontab
Текущата конфигурация на /etc/crontab:
 

-*/15 * * * * root test -x .......................................

Нататък си е стандартна конфигурация.
Ако променя този crontab, промяната ще влезе за всички джобове, които се изпълняват с cron, аз искам само на този джоб да променя времето за изпълнение. 
Приемам всякакви идеи и реализации, не е задължително да е тази, която съм направил, стига да вършат работа.

Поздрави


Линк към коментара
Сподели в други сайтове

Ако искате САМО таза задача да се изпълнява в 00:00, макар и да се пази със старата дата, то просто зарежете logrotate.

 

Проблем може да има ако дескриптора стои отворен за логовете, а не се затваря при всеки запис. Затова можете да направите следния скрипт:

#!/bin/bash

log=/var/log/catalina.out
d=`date +%Y-%m-%d -d "yesterday"`

cp ${log} ${log}-${d}
gzip ${log}-${d}
>${log}

Ако лога се отваря всеки път при запис можете да минете и без копирането като направите скрипта така:

#!/bin/bash

log=/var/log/catalina.out
d=`date +%Y-%m-%d -d "yesterday"`

mv ${log} ${log}-${d}
gzip ${log}-${d}
touch ${log}

При втория вариант може да се наложи да добавите chown и chmod според зависи какви права искате.

 

След това просто добавете в crontab-а

0 0 * * * root /path/to/script/file.sh

Би трябвало да се получи :)

 

Успех!

 

P.S. ползвайте zcat, zless за да гледате gzip-натите логове. Ако са текстови това ще ви спести доста място вместо да ги държите просто като текст.

Линк към коментара
Сподели в други сайтове

edit:

 

За да не заемат място, може ако искате да добавите функция да трие старите логове, например така ще оставя само за последните 5 дни, но може да замените със колкото вие искате.

 

Например заменете -mtime +5 със -mtime +60 за 60 дни и т.н

logData=/var/log/
find $logData/catalina* -maxdepth 1 -mtime +5 -type d -exec rm -rv {} \;
Линк към коментара
Сподели в други сайтове

... даже преместете gzip-а да става последно, че иначе ще мине време докато създаде или нулира "новия" файл ... ама навярно вече сте схванали идеята де :)

Линк към коментара
Сподели в други сайтове

... даже преместете gzip-а да става последно, че иначе ще мине време докато създаде или нулира "новия" файл ... ама навярно вече сте схванали идеята де :)

То аз не знам защо изобщо му трябва този gzip, не може ли просто да мине без него, та чак да архивира логовете?

Линк към коментара
Сподели в други сайтове

То аз не знам защо изобщо му трябва този gzip, не може ли просто да мине без него, та чак да архивира логовете?

 

Може, що да не може.

 

Просто когато имаш гигабайти логове какъв е смисъла да ги държиш така, вместо да ги смачкаш и да станат няколко MB? Човека е написал, че лога му е станал голям та затова му предложих да ги архивира ... иначе да си ги държи как са си. Ако иска да си държи последния лог, освен текущия без да го компресира, за да може лесно да си преглежда предния ден, а старите да ги компресира. Не, че cat, less и т.н. не може да им се зложи едно z отпред и да правят същото, но ако наистина лога му е гигабайти ще е по-бързо без компресия.

 

Той си решава - дето се вика негови са си логовете, ако иска ще си ги държи така, ако ги ще си ги иархивира, ако иска ще си ги трие :)

Линк към коментара
Сподели в други сайтове

Здравейте,

 

Колега, mail123456, видях скрипта ти, но само едно нещо не ми стана ясно - твоя скрипт всеки ден ще прехвърля съдържанието на целия файл catalina.out в catalina.out.%date, т.е. ако днес го вкарам в кронтаб и си затрия съдържанието на текущия catalina.out, утре ще имам файл, който ще е окей (ще има файл catalina.out18-11-2014), със съдържание за 18-ти, но когато се създаде файла за 19 в него ще влиза и съдържанието от 18-ти? След това за 20-ти ще съдържа 19 и 18 и т.н. Поправи ме ако греша? Ако не греша, ако може да предложиш модификация на скрипта във всеки лог да си е лога само за конкретния ден.

 

Поздрави

Линк към коментара
Сподели в други сайтове

И двата скрипта са направени така, че да трият съдържанието на старият лог, затова не се бойте!

 

edit: Обърнете внимание на последните редове от скртиптове те.

Линк към коментара
Сподели в други сайтове

Здравейте,

 

Колега, mail123456, видях скрипта ти, но само едно нещо не ми стана ясно - твоя скрипт всеки ден ще прехвърля съдържанието на целия файл catalina.out в catalina.out.%date, т.е. ако днес го вкарам в кронтаб и си затрия съдържанието на текущия catalina.out, утре ще имам файл, който ще е окей (ще има файл catalina.out18-11-2014), със съдържание за 18-ти, но когато се създаде файла за 19 в него ще влиза и съдържанието от 18-ти? След това за 20-ти ще съдържа 19 и 18 и т.н. Поправи ме ако греша? Ако не греша, ако може да предложиш модификация на скрипта във всеки лог да си е лога само за конкретния ден.

 

Поздрави

 

Грешите.

 

В първия вариант на скрипта съдържанието на файла се нулира с >. По този начин дори някой да държи файла отворен няма да получи съобщение за грешка, както и няма да се смени inode.

 

При втория вариант имате touch, което създава нов празен файл, който ще бъде отворен когато е нужно и ще започне да се записва на чисто, както се казва.

Линк към коментара
Сподели в други сайтове

Архивирана тема

Темата е твърде стара и е архивирана. Не можете да добавяте нови отговори в нея, но винаги можете да публикувате нова тема, в която да продължи дискусията. Регистрирайте се или влезте във вашия профил за да публикувате нова тема.

×
×
  • Добави ново...

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите Условия за ползване