私のnohup.out
ファイルは急速に成長しています。
バックグラウンドでアプリケーションを実行していnohup.out
ます。ファイルを書き込んでいます。
今nohup.out
、私は私のアプリケーションを殺すことなくファイルを回転させる必要があります。これはできますか?
私のnohup.out
ファイルは急速に成長しています。
バックグラウンドでアプリケーションを実行していnohup.out
ます。ファイルを書き込んでいます。
今nohup.out
、私は私のアプリケーションを殺すことなくファイルを回転させる必要があります。これはできますか?
回答:
と組み合わせてflogを確認する必要がありますlogrotate
。これを介してアプリケーション出力をパイプSIGHUP
処理すると、実行中のアプリケーションを強制終了することなく、flogプロセスを実行できます。
flog(ファイルロガー)は、STDINから入力を読み取り、ファイルに書き込むプログラムです。
SIGHUPを受信すると、ファイルが再度開かれ、ログのローテーションが可能になります[RHのlogrotate(8)を参照]。
ログファイルは、flogがローテーションの発生(つまり、古いファイルがなくなったかiノードが変更された)を検出した場合にのみ、再度開かれます。flogは非常に小さい(500バイト未満のメモリフットプリント)。
To save output to FILE, use 'nohup COMMAND > FILE'
回転できません。コマンド>nohup.out
でそれを切り捨てることができます。これにより、ファイル内のすべてのコンテンツが削除されます。
出力を保存する必要がある場合は、最初にファイルをコピーしてから切り捨てることができます。しかし、レース用の小さなウィンドウがあり、ファイルをコピーした後、切り捨てる前に出力を書き込むことができます。そのウィンドウの間に書き込まれた出力は、永久に失われます。
copytruncate
の中でlogrotate
。ただしnohup.out
、cronジョブをローテーションするように構成するファイルの種類はほとんどありません。
できません。
ファイル(rm)のリンクを解除できますが、データにはまだディスク上のフットプリントがあり、開いているファイルハンドルがある限り、引き続き書き込まれます。
ファイルの名前を変更できますが、これでもファイルへの書き込みは停止されません(ただし、バックグラウンドジョブを定期的に開始している場合、新しいジョブは同じファイルに書き込みます)。
実際には、ジョブの出力を、これを処理するために設計されたもの(apache rotatelogsなど)に明示的にリダイレクトする必要があります。
Logrotateには、通常のローテーション(および設定されている場合は圧縮)スキームにコピーされた後、指定されたファイルを切り捨てる(空にする)copytruncateオプションがあります。
copytruncate
Truncate the original log file in place after creating a copy,
instead of moving the old log file and optionally creating a new
one, It can be used when some program can not be told to close
its logfile and thus might continue writing (appending) to the
previous log file forever. Note that there is a very small time
slice between copying the file and truncating it, so some log-
ging data might be lost. When this option is used, the create
option will have no effect, as the old log file stays in place.
これで遅すぎるかどうかわからない。しかし、このフォーラムに出くわした他の人たちにとって、私はflogや何かで何も試す必要がありませんでした。
私の仕事は次のように始まります:
nohup <my process> &
これで私の仕事が始まり、そのディレクトリのnohup.outに追加が始まります。
私がしなければならなかったのは、通常ディストリビューションに付属するlogrotateをセットアップし、このように構成することだけでした /etc/logrotate.conf
~/my abosolute path/nohup.out {
size 1024k
copytruncate
rotate 100
maxage 100
}
そしてそれはうまくいった!nohup.outは、同じファイルの新しいアペンドを取得中に切り捨てられていました。プロセスも死ななかった。そして、nohup.out-20190528
このような新しいnohup.out が作成されました。
お役に立てれば。