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

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

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

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

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Q&A

解決済

2回答

16090閲覧

Apacheログがローテート後に更新されない

H_K

総合スコア14

logrotate

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

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

0グッド

0クリップ

投稿2016/11/07 03:15

編集2016/11/07 03:18

###前提・実現したいこと
Apacheのログローテートを正しく設定したいので、
下記問題が発生している場合、確認すべき箇所をご教示ください。

###発生している問題・エラーメッセージ

ローテートの間隔を「daily」に設定しています。
ローテートが実行されると、access_logが更新されなくなります。
(access_log-YYYYMMDDというローテートファイルは作成されています)

エラーメッセージは出力されていません。
postrotate ~ endscript において、/sbin/service httpd gracefulを、
記述していますが、error_logには、何も出力されていません。

/var/lib/logrotate.status を確認すると、
過去に手動でローテートを実行した日付のまま、更新されていません。

###該当のソースコード

/var/log/httpd/access_log /var/log/httpd/error_log { daily missingok rotate 90 compress ifempty sharedscripts postrotate /sbin/service httpd graceful endscript }

###試したこと

ログが記録されなくなった後(ローテート実行後)、
手動で/sbin/service httpd gracefulを実行すると、
ログファイルが更新されるようになります。

/usr/sbin/logrotate -dv /etc/logrotate.conf においても、
エラーは出力されていません。

###補足情報(言語/FW/ツール等のバージョンなど)
CentOS release 6.7 (Final)
Server version: Apache/2.4.23 (Unix)
Server built: Jul 24 2015 11:52:28

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

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

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

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

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

guest

回答2

0

ベストアンサー

/var/lib/logrotate.status が更新されていないということは、/sbin/service httpd graceful が失敗しているようです。

graceful でログファイルの切り替えができないので、httpd は古いログファイルに書き込もうとしますが、logrotate の compress では、古いログファイルを圧縮して別のファイル(別の i-node)を作成し、古いログファイルを削除しますので、httpd が書き込むファイルがありません。
lsof で調べると access_log, error_log が (deleted) になっていると思います。

graceful が失敗する原因についてはわかりませんが、標準出力、標準エラー出力をファイルに書き出すと何かわかるかもしれません。
また、古いログファイルを 1世代だけ無圧縮にするよう delaycompress にした方が安全だと思います。

var/log/httpd/access_log /var/log/httpd/error_log { daily missingok rotate 90 compress delaycompress ifempty sharedscripts postrotate /sbin/service httpd graceful > /tmp/graceful.out 2>&1 #### もし、原因が判明し、解決したら、以下のように #### 標準出力、標準エラー出力を捨てて、かつ、常に true (exit code 0)とするとよい # /sbin/service httpd graceful > /dev/null 2>/dev/null || true endscript }

投稿2016/11/07 07:49

TaichiYanagiya

総合スコア12173

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

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

H_K

2016/11/11 01:32 編集

ご指摘の通り /sbin/service httpd graceful が失敗していました。 /sbin/service httpd graceful > /tmp/graceful.out 2>&1 を設定したところ、 下記の出力がありました。 Gracefully restarting httpd: (13)Permission denied: AH00058: Error retrieving pid file /tmp/httpd.pid AH00059: Remove it before continuing if it is corrupted. lsof でも、以下の通り、deletedとなっていました。 /var/log/httpd/access_log-20161111 (deleted) 原因が判明したので、解決まで前進しました。 ありがとうございました。
guest

0

下記2点、お試し頂ければ幸いです。
・/etc/logrotate.d配下にapacheのログローテート設定ファイルhttpdと似てるファイル名がありましたら移動ももしくは削除してみて下さい、似てるファイル名があるとローテションがうまく動かない時があるようです。
・ローテート後にタイムスタンプdateextを不要してみて確認してみて下さい。

ちなみに私は、以下のように設定しており、問題なく動いてます。
ご参考までに宜しくお願いいたします。

/var/log/httpd/*log { missingok rotate 365 dateext sharedscripts daily compress postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript olddir /var/log/httpd/rotated }

投稿2016/11/07 03:26

pond

総合スコア350

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

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

H_K

2016/11/11 01:23

ご教示いただいた通り、似たファイル名を確認しましたが、存在しませんでした。 dateextや設定の内容も調査しましたが、残念ながら、解決に至りませんでした。 引き続き、調査いたします。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問