/var/opt/log_loc1、/var/opt/log_loc2、/var/opt/log_loc3のさまざまなcronジョブから生成された多くのログがあります。各ログを表示するのではなく、エラーメッセージを含むすべてのログで新しいログファイルを入力するようにcronジョブをスケジュールする方法はありますか?
デフォルトでは、「all_logs_%Y_%m_%d」という名前の新しいログファイルをすべてのログ名とエラーで埋めたいと思います。毎日新しいall_logs_%Y_%m_%dがあります。
例:これは/var/opt/log_loc1にある私のログファイルのリストです。
- InsertSales_2019_08_19.log
- PurgeHistory_2019_08_19.log
- 11_2019_08_19.logのインポート
- ImportSales_2019_08_19.log
- 22_2019_08_20.logのインポート
- 33_2019_08_20.logのインポート
- InsertSales_2019_08_20.log
- PurgeHistory_2019_08_20.log
- 11_2019_08_20.logのインポート
- ImportSales_2019_08_20.log
- 22_2019_08_21.logのインポート
- 33_2019_08_21.logのインポート
- InsertSales_2019_08_21.log
- PurgeHistory_2019_08_21.log
*質問が不完全な場合はお詫び申し上げます。
答え1
どうですかfind
? 、私が考えることができる最も簡単な方法は、これを使用することです。多分少し粗雑になるかもしれませんが、作業を完了する必要があります。
find /var/opt/ -type f -name "*.log" -exec grep -iH 'err\|warn\|fail\|whatever' {} >> total.log \;
すべてのログファイル(すべての日付)のみをフィルタリングするのか、今日からのみフィルタリングするのかわかりません。日付をフィルタリングする必要がある場合は、オプションを使用するか、-mtime
フィルタリングオプションのみfind
「トリック」を使用できます(-name
例:昨日)。ログ
find /var/opt/ -type f -name "*_`date --date yesterday '+%Y_%m_%d'`.log" -exec grep -iH 'err\|warn\|fail\|whatever' {} >> total.log \;
これが役に立つかどうかはわかりません...別の不明な点は、ログファイルにどのような構文がありますか?アルファベット順や数字順で検索できないため、結局find
汚れたファイルになります。一般的に(そして教義でなければならない)、ログは%Y%m%d_%H:%Mまたは同様のもので始まります。この場合、次のようにsort
出力できます。find
find /var/opt/ -type f -name "*.log" -exec grep -iH 'err\|warn\|fail\|whatever' {} \; sort -no total.log
この方法を試してみました/var/log
が、効果があるようですが、前述したようにこれは粗雑な方法です。
お役に立てば幸いです。
find
、およびページでsort
使用したオプションの詳細を確認できます。grep
man