teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

文の順番入れ替え

2023/11/01 14:26

投稿

otn
otn

スコア86349

answer CHANGED
@@ -1,15 +1,15 @@
1
1
  logrotateは、prerotateやpostrotateでコマンドを実行することを除けばファイルをリネームして新規作成するだけです。
2
2
 
3
+ Unix/Linuxの場合は、稼働中のプロセスが`aaa.log`をオープンしたままでログを書いている時に`mv aaa.log aaa.log.1; touch aaa.log`をした場合、プロセスはファイルの名前が変わったことなど無関係なので、そのまま最初にオープンしたファイル(現在は`aaa.log.1`という名前に変わっている)に書き続けます。
4
+ ファイル名はオープンの時に必要なだけで、オープンしたら無用で、`mv`や`rm`してもプログラム動作に無関係です。
5
+
3
6
  稼働中のプロセスがオープンしたままの古いログファイルをクローズして、新規作成されたファイルをオープンし直すのは、稼働中のプロセスにその旨指示する必要があります。デーモンプロセスはSIGHUPを未使用(※1)なので、「SIGHUPを受け取るとファイルをオープンし直す」という仕様のデーモンプロセスが多いようですので、そういうプロセスの場合は、postrotateでSIGHUPを送るコマンドを実行します。
4
7
  (※1: SIGHUPは制御端末に関するシグナルだが、デーモンは制御端末を持たないので本来のSIGHUPを受け取ることは無い)
5
8
 
6
- Unix/Linuxの場合は、稼働中のプセスが`aaa.log`をオープンしたままでログを書いている時に`mv aaa.log aaa.log.1; touch aaa.log`をた場合、プロセスは名前が変わったことなど関係なので、そのまま最初にオープンしたファイル(現在は`aaa.log.1`という名前変わっている)に書き続け
9
+ 「HUPを送る」とかは、グファイルをオープンしっぱなのデーモンプロセスは、上記のような仕様のことが多い」という以上の意味はので、そいう仕様かどうか確認すること無しHUPを送っても無駄かも知れせん
7
- ファイル名はオープンの時に必要なだけで、オープンしたら無用で、`mv`や`rm`してもプログラム動作に無関係です。
8
10
 
9
- ういう「ログファイルをオープンしっぱなしで書くじゃくて、「ログを書く都度オープン、書き込み、クローズ」繰り返しいる場合(オーバーヘッド大きいので普通はしないが大量にログを書くことが絶対あり得ないプログラムならあるかも)は、オープン時点`aaa.log`と言う名前のファイルに書きます。
11
+ ういう「外部からの指示でファイルをオープンし直す機能を持たいプログラムの場合はHUP送っもしょういので、ログファイルオープンし直すは、postrotateでプログラムの停止&再起動どが必要です。
10
12
 
11
- HUPを送る」とかは、「ログファイルをオープンしっぱなしのデモンロセスは上記よう仕様のことが以上意味は無いので、そういう仕様かどうか確認すること無しにHUPを送っても無駄かも知れません
13
+ こういう「ログファイルをオープンしっぱなしで書く方式」じゃなくて、「ログを書く都度、オープ書き込み、クローズ」を繰り返している場合(オーバーヘッドが大きいで普通はしいが、大量にログを書くことが絶対にあり得なプログラムならあるかも)は、オープン時点で`aaa.log`名前ファイルに書きますので、HUPを送ったり再起動しなくよいわけです
12
14
 
13
- そういう「外部からの指示でファイルをオープンし直す」機能を持たないプログラムの場合は、HUPを送ってもしょうがないので、ログファイルをオープンし直すにはプログラムの停止&再起動などが必要です。
14
-
15
15
  デーモンによっては他にも「`HUP`を受けると、設定ファイルを読み直す機能」があったりします。これも、そういう仕様のプログラムかどうかを確認する必要があります。