質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
logrotate

logrotateはログの世代管理やサイズ制限を行うLinux標準のツールです。

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Q&A

解決済

2回答

3390閲覧

ログローテーションの挙動について

ruuuu

総合スコア176

logrotate

logrotateはログの世代管理やサイズ制限を行うLinux標準のツールです。

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

0グッド

0クリップ

投稿2020/06/03 11:59

編集2020/06/03 12:00

ログローテートの動作を確認する為、Qiitaの記事を参考に、同様の手順で、 /tmp/log/logrotate.confを作成し、sudo logrotate -fv /tmp/log/logrotate.confを実行しました。
以下は、「/tmp/log/logrotate.conf」です。

/var/www/django/app/app_test/app_project/test/log/*.log { su root root daily missingok nocompress rotate 1 dateext dateformat .%Y-%m-%d }

こちらsudo logrotate -fv /tmp/log/logrotate.confのコマンド実行前には、すでに/var/www/django/app/app_test/app_project/test/log/フォルダ内には、10個以上のファイルが存在している状態でした。その為、コマンド実行後は、「20200603_150001.log.2020-06-03」といった名前に全てのファイルがリネームされましたが、全てのファイルは残った状態のままでした。
何故、ファイルが全て残ったままなのでしょうか...?
こちら、色々調べたのですが分からなかった為、ご助言頂けましたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hentaiman

2020/06/03 13:49

何を期待しているのか分からないけど、リネームしたファイルが消えて欲しいのか? リネームしたファイルは1日残ってリネーム前のファイル名で新たにログが出力される、それが目的でローテートしてるんじゃないのか? ※参考サイトは見てません
guest

回答2

0

ログローテーションの設定ファイルは/etc/logrotate.d配下が標準ですので、場所を変えてみるのがよいと思います。

そこに置くと、/etc/logrotate.confでデフォルトで設定されている世代数も有効になるはずです。

投稿2020/06/03 13:38

yukky1201

総合スコア2751

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

各ファイルについて、1世代残すので、1回の実行では全部残るのでは?

「20200603_150001.log.2020-06-03」といった名前に

もう一度、20200603_150001.log という名前のファイルを作れば、次の実行で20200603_150001.log.2020-06-03が削除されて、新しい20200603_150001.logがまたリネームされるという動作になると思います。

やりたいことを間違えているのでは?

logrotateの機能は、何らかのプログラムが固定ファイル名aaa.logというログファイルを作成するときに、そのaaa.logを世代管理するということです。
おそらく、あなたの使っているプログラムは固定ファイル名のログを書くんじゃなくて日時をファイル名にしたログを書くのでは?

そうであれば、logrotateの出番はなくて、単に一定の基準で古いファイルを消すだけです。

投稿2020/06/03 13:20

otn

総合スコア85762

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruuuu

2020/06/03 14:40 編集

ご回答ありがとうございます。 >おそらく、あなたの使っているプログラムは固定ファイル名のログを書くんじゃなくて日時をファイル名にしたログを書くのでは? はい。定期実行によって、スクリプトを実行し、その際の標準出力をファイルに出力し、日付を末尾につけて、保存しています。 毎日ログファイルがいくつか作成されていく為、一週間分のファイルのみ保存し、後は削除するように考えていました。その為に、ログローテートを導入しようと考えていたのですが、少々勘違いしてしまっていたかもしれません。 自分の場合は、定期実行で「find /path/to/log -name '*.log' -mtime +7 -delete\」こちらのような形で、定期実行に設定しておくだけで、十分でしたかね...? ログローテートは、同一ファイル名のものが定期的に作成されてしまうケースに、使用するといった感じなのですね
otn

2020/06/03 14:39

そうですね。「タイムスタンプ基準で一定期間」という事なら、それが良いです。
ruuuu

2020/06/03 14:41

ご返信ありがとうございます。 毎回ファイル名が変わってしまうものに関しては、ログローテートは意味をなさない感じなのでしょうか?
otn

2020/06/03 14:43

はい。そのとおりです。
ruuuu

2020/06/04 00:57

そうだったのですね... しかし、どうしても腑に落ちないのが、ログローテートを行わなかった場合でも、ファイルに同一の名前は存在できないのではないかと思うのですが、どのようなケースで使用されるのかがいまいち引っかかってしまう所があるんですよね。。。
otn

2020/06/04 08:34

ログローテートを行わなかった場合は、aaalog にひたすら書いて、aaalog が巨大なファイルになります。 巨大なファイルを作らないために、ログローテートで、例えば毎日 aaalog-20200604 という名前にリネームして、新規でaaalogを作ります。
ruuuu

2020/06/04 10:07

ご返信ありがとうございます。 大方、理解することが出来ました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問