production.log
[2019-02-11 10:18:18] GET /
[2019-02-11 11:18:19] POST blavadasdasdgd
...
... <--- A lot of in between logs and other data
...
[2019-02-12 11:18:20] INFO ::HTTPServer#start: pid=21378 port=4567
[12/Mar/2019:11:18:25 +0200] "GET / HTTP/1.1" 404 458 0.0086
[12/Mar/2019:11:18:26 EET] "GET / HTTP/1.1" 404 458 - -> /
[12/Mar/2019:11:18:27 +0200] "GET /" 200 18893 0.0020
[2019-03-12 11:18:28] GET /
[2019-03-12 12:18:29] POST blablabla
...
... <--- A lot of in between logs and other data
...
[13/Mar/2019:11:18:30 +0200] "GET / HTTP/1.1" 404 458 0.0086
[13/Mar/2019:11:18:31 EET] "GET / HTTP/1.1" 404 458 - -> /
[13/Mar/2019:11:18:32 +0200] "GET /" 200 18893 0.0020
...
... <--- A lot of in between logs and other data
...
[2019-03-14 11:19:18] GET /
ファイルの内容は偽です(ただし、タイムスタンプの順序は正しいです)年をとる到着最新)
私はnohupを介して実行され、すべてを次のファイルに出力するWebサーバーを持っています。production.log
約(+10 GB)のデータと情報がここに記録されており、多くの最新のログとデータを維持するために何らかの方法で切り取り、古いデータを削除したいと思います。だから私のおおよその推測は、最後の30,000行を取得し、次の新しいファイルに出力することです。production.log.1
その後、もう一度移動して交換します。production.log
例:
tail -30000 production.log > production.log.1 && mv production.log.1 production.log
今試してもtail -f production.log
何も出力されません。新しいWebサーバーからインポートされましたが、ファイルを置き換える前の最後のタイムスタンプログのみが表示されます。 Web サーバーが書き込みを停止します。
他のファイルに書き込むことなくこれを行うより良い方法と良い方法はありますか? Webサーバーからサイトへの2>&1出力を維持しながら、サイトの古いデータを削除する必要があります。
答え1
確実にする追加ファイルの出力、つまり use >>
and not です>
。
次に、「コピーと切り取り」を使用してログを保存できます。
cp production.log production.log.1 && cp /dev/null production.log
コピーコマンドが完了し、ログファイルの切り捨てを実行するのに少し時間がかかるため、一部のログが失われる可能性がありますが、これは避けられません。
このユーティリティには、logrotate
これを行うための特別なガイドラインがありますcopytruncate
。
単にリダイレクトする代わりに追加を使用することの重要な点は、そうでなければログファイルに書き込むプログラムが書き込みオフセットを覚えている可能性があることです。したがって、たとえば、ログファイルのサイズが2 MBでファイルを切り捨ててプログラムが書き換えると、最終的に2 MBの空のブロックを含む希少ログファイルが作成され、再記録されます。
答え2
stderr または少なくとも stdout に書き込み、パイプの書き込みの終わりに stdout/error があることを確認し、パイプの読み取りの終わりに厳密なサイズのキャップ、自動回転、回転可能 -on を保持するツールを実行します。 -demand、ログファイルが指定されたディレクトリに設定されます。
./記録する内容2>&1 |自転車ログ/
logrotate
あなたに提供するログエントリは失われません。そして、ログライターを新しい出力ファイルに切り替えるためにサーバーに全く触れる必要はありません。
これらのツールには以下が含まれます。
- ダンバーンスタイン
multilog
~からデーモンツールまたは Dan Bernsteinmultilog
~からDJBウェア、またはブルースガンターのmultilog
~からdaemontools-アンコールまたはAdammultilog
Sampson艦隊 - ローランベルコ
s6-log
~からs6 - ゲレットペプの
svlogd
~から走る - ウェインマーシャル
tinylog
~から犯人 - 私のもの
cyclog
~からおやつ
追加読書
- ジョナサンデボインポラード(2016)。今世紀にはlogrotateやnewsyslogを使用しないでください。。よく与えられる答えです。
- ジョナサンデボインポラード(2016)。 」記録」。 スナックガイド。ソフトウェア。
- ジョナサンデボインポラード(2015)。 」記録」。デーモンツールシリーズ。よく与えられる答えです。
- https://unix.stackexchange.com/a/326166/5132