サーバーにアプリケーションをデプロイし、特定の状況では、アプリケーションは次の形式でいくつかのログを生成します。
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
-1
lsの代わりに使用すると、-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)