cron または logrotate を使用した複数の同じログ処理

cron または logrotate を使用した複数の同じログ処理

サーバーにアプリケーションをデプロイし、特定の状況では、アプリケーションは次の形式でいくつかのログを生成します。

process_name.hostname.common_text.log.{error/info/warning}.date.time 

この形式のため、1つのログではなく同じ内容を含む複数のログがあります。process_name.hostname.common_text.{エラー/情報/警告}一部のみ、残りは日付と時刻の違いによって異なります。しかし、logrotateに関する限り、これらすべてを別々のログとして扱い、私が言うと、各ログのコピーを1つ保持します。

スピン1

logrotateconfから

しかし、私の場合は同じログなので、各カテゴリの最新の1つのログを除いて、どのログも保持したくありません(エラー/情報/警告)。私は何をすべきですか?

cronで毎週実行されるスクリプトを作成したいと思います。スクリプトは各カテゴリ(エラー/情報/警告)タイムスタンプを使う(ls-ltr) 次に残りのログを削除します。しかし、スクリプトに入れようとすると複雑すぎます。

私はこのようなものを探しています。

ls -ltr |grep process_name.hostname.common_text.log.error |head -n -1
ls -ltr |grep process_name.hostname.common_text.log.info |head -n -1
ls -ltr |grep process_name.hostname.common_text.log.warning |head -n -1

上記の3つのコマンドはすべての名前を返します。process_name.hostname.common_text.log.{エラー/情報/警告}.date.timeログ(最も最近のログを除く)

1)上記の各コマンドの出力を次にパイプできますか?実装するまたはパラメータ走れるように同じ行に無線周波数反対ですか?

2)より良いアプローチは何ですか?同様に、process_nameには2つの異なる名前があるため、6つ以上のコマンドを実行する必要があります。

3)1行にエラー、情報、警告など3回grepする方法はありますか?

ベストアンサー1

-1lsの代わりに使用すると、-lファイル名のみを取得してそれをrmに直接渡すことができます。私は次のようなものを使用します:

rm $(ls -1tr process_name.hostname.common_text.log.error* | head -n -1) \
$(ls -1tr process_name.hostname.common_text.log.info* | head -n -1) \
$(ls -1tr process_name.hostname.common_text.log.warning* | head -n -1)

おすすめ記事