5

古い tomcat や jboss のログ、またはその他のタイムスタンプ付きのログ (catalog.log) を削除する解決策が見つかりませんでした。/server.log. . 基本的に、これらのログは jboss によって次のようにローテーションされます: server.log、server.log.20131201、server.log.20131203 など。

logrotate を使用して n 日より古いログを削除する方法はありますか? postrotate 内で find を使用したり、jboss/tomcat ロギング プロパティを微調整したりしたくありません。logrotate が実際にこれを単独で達成できるかどうかを知りたいだけです。あまり生産的ではないことはわかっていますが、これに対する答えが必要な問題に悩まされています。

4

4 に答える 4

9

find内部で使用したくない場合はpostrotate、できません。

logrotateserver.logは、Tomcat/JBoss によってローテーションされたのすべてのインスタンスを別のファイルとして扱い、それらは一意であるため、logrotate一度だけローテーションします。maxage- 日より古いローテーションされたログを削除するディレクティブ -nログファイルがローテーションされるかどうかのみがチェックされるため、maxage一度しか実行されず、ファイルの経過時間を追跡できません。

ただし、 の使用について気が変わった場合は、Tomcat および JBoss によって作成されたログ ファイルの管理を簡素化するのfindlogrotate役立ちます。次のような構成ファイルで古いファイルを圧縮して削除するために使用します。

/path/to/logs/server.log.????-??-?? {
    compress
    compresscmd /usr/bin/bzip2
    nocreate
    nodateext
    ifempty
    missingok
    rotate 1
    size 0
    start 0
    lastaction
        # Remove rotated files older than 180 days
        find /path/to/logs -name 'server.log.????-??-??.0.bz2' -mtime +180 -exec rm {} \;
    endscript
}

どこ:

  • rotate 1名前をcompress変更して圧縮します。たとえばserver.log.20131201server.log.20131201.0.bz2. 0タイムスタンプと.bz2拡張子の間はstart 0.
  • size 0ファイルの名前が常に変更され、圧縮されていることを確認します。
  • このlastactionブロックは、ローテーションされてから 180 日以上経過したファイルを削除します。
于 2015-03-09T21:51:06.253 に答える
0

スクリプトを /etc/cron.daily に配置できます。例えば:

cat /etc/cron.daily/tomcat-rotate-logs

#!/bin/sh

# erasing tomcat logs older then 7 days

for x in $(find /var/log/tomcat/ -type f -mtime +7);
do
       rm "$x";
       logger -t TOMCAT-ROTATE-LOGS "Erasing $x [done]"; 
done

または logrotate 構成を作成します。例: cat /etc/logrotate.d/tomcat

/var/log/tomcat/*.log {
        su tomcat tomcat
        copytruncate  
        daily  
        rotate 6  
        compress  
        missingok
}

「su tomcat tomcat」 - 間違ったパーミッションで logrotate エラーを回避することを表します

于 2015-11-19T12:54:28.667 に答える