私のログの1つが実行中のプロセスで多くのスペースを消費していることがわかりました。 logadmを実行して回転できるようにこのファイルを整理したいと思います。しかし、私は何をすべきかわかりません。
# >MyLog_nohup.out
# ls -lLh MyLog_nohup.out
-rw-r-lr-- 1 user group 72G Jul 30 07:26 MyLog_nohup.out
# du -sh MyLog_nohup.out
480K MyLog_nohup.out
オフにしてもまだ72Gを消費し、さらに実行すると空白行だけが表示されます。この問題をどのように解決できますか?
プロセスを再開する余裕はありません。しかし、logadmを使ってこのログファイルを回転させたいのですが、これは可能ですか?試してみましたが、無限ループで空白行を処理し続けます。このファイルに対して追加の操作を実行した場合と同じです。この問題を解決する他の方法はありますか?
logrotate の場合、開いたファイルを処理する copytruncate オプションがありますが、ループで実行されるため、ファイルに空白行がある場合は使用できません。なぜこのファイルを/more/head見ることができないのか、まだ理解していません!
ベストアンサー1
実行中のプロセスが開いている限り、LinuxおよびPOSIXシステムではファイルは破損しません。ファイル記述子書き込んでいるファイルの場合、ファイルを削除したり名前を変更したりしても書き続けることができます(ファイル記述子は次のようになるため)。アイノード、ファイル名ではありません)。特に、logrotate
またはlogadm
外部コマンドシーケンスは、ディスク領域に有用なタスクを実行しません。
私はあなたがLinuxを使用していると仮定します。
プロセスのpidが1234の場合は、具体的にリストされている/proc/1234/
ディレクトリを表示できます/proc/1234/fd/
。読む工程(5)。
おそらく問題のあるプロセスを停止する必要があります(最後にkill -TERM
thenを使用してください)。kill -QUIT
kill -KILL
信号(7)&殺す(1))その後、ファイルを削除し、最後により便利なロギングを実行するようにプログラムを変更および/または設定してから再起動します。
プログラムによって実行されたすべての計算が失われた可能性があります。だから、できるだけ早く中断して改善することをお勧めします。アプリケーションチェックポイントまたは〜にこだわる、または閉じる方法を追加し、名前を変更してログファイルを再度開き、拡張バージョンのプログラムを再起動します。
あなたは読まなければなりません高度なLinuxプログラミング。プログラムにはいくつかのバグがあります(おそらくロギングに関連しています)。あなたは使用することができますトラック(1)理解するシステムコールあなたのプロセスに従って完了したら使用することができますシステムログ(3)あなたの(改善された)プログラムから。
ほとんどの場合、プログラムに設計エラーがある可能性があります。だから今、停止し、考え、改善し、再起動することをお勧めします。ディスクがいっぱいになるまで待つことは役に立ちません。状況をさらに悪化させる可能性があります。
今後のテスト目的で、いくつかの設定を検討することができます。ディスククォータおよび/またはいくつかのリソース制約(例:制限設定(2)とbashulimit
組み込み)。
将来的には、プロセスを再起動するコストに耐えるようにプログラムを設計してください。これを余裕がないことは常に大きな間違いです(特にバックアップ戦略が必要でバックアップ戦略が必要な場合)。改訂管理あなたのソースコードでお勧めします。子そのため)。