「/var/log/messages」がログローテーションされていない
ログ監視で過去の古いエラーを拾い警告があがっている
Nagiosでログ監視をしていますが、/var/log/messagesで過去のエラーを拾ってエラーが上がりメールが来ていました。
「/var/log/messages」を確認すると1年以上ログローテーションが実行されていません。
下記のようにログローテーションをテストモードで実行すると、「error: stat of /var/log/spooler failed: No such file or directory」でエラーとなっています
$ sudo logrotate -d /etc/logrotate.d/syslog reading config file /etc/logrotate.d/syslog reading config info for /var/log/cron /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler /var/log/kernlog #--- 省略 ---- considering log /var/log/spooler error: stat of /var/log/spooler failed: No such file or directory
ログローテーションでファイルがない場合でも処理を実行する方法
logrotate は、設定ファイルに記述されたパスのログファイルが存在しない場合、通常はエラーを出して処理を停止することがあります。
今回は、「/var/log/spooler」 のファイルが存在しないとそこで処理が止まってしまいログローテーションを実行されてなかったようです。
ファイルが存在しないとそこで処理を実行するようにするには以下の解決方法があります
存在しないファイル(/var/log/spooler) を作成する
存在しないファイル(/var/log/spooler)を手動で作成して、適切なパーミッションに設定すれば、ログローテーションがエラー無く実行されます
sudo touch /var/log/spooler sudo chown root:root /var/log/spooler sudo chmod 600 /var/log/spooler
存在しないファイル(/var/log/spooler) を設定から外す
このファイル(/var/log/spooler)は、プリンタースプーラーなどのログファイルとして使用されます。サーバーにプリンター機能を利用していないケースは、このファイルは不要ですので、設定ファイルから /var/log/spooler の記述を削除して対応すれば良いかと思います
$ sudo vim /etc/logrotate.d/syslog /var/log/messages /var/log/secure /var/log/spooler # この行を削除する /var/log/kernlog
missingok オプションを利用する
missingok オプションを追加することで、ファイルが存在しなくてもエラーを出さずに処理を続行させることができます。この方法がお勧めです。
- missingok : ローテーションするログファイルがなくてもエラーを出さない
$ sudo vim /etc/logrotate.d/syslog /var/log/cron /var/log/messages /var/log/secure /var/log/spooler { missingok # missingok : ローテーションするログファイルがなくてもエラーを出さない sharedscripts postrotate /usr/bin/systemctl -s HUP kill rsyslog.service >/dev/null 2>&1 || true endscript }
手動でログローテーションを実行する
ファイルが無くてログローテーションが実行されていない件の対策ができたので、設定ファイルを修正等を実行後は、logrotate をテスト実行 (sudo logrotate -d /etc/logrotate.d/syslog) して、エラーが出ないことを確認します。
その後、手動でローテーションを実行 (sudo logrotate /etc/logrotate.d/syslog) して、/var/log/messages がローテーションされるか確認してください。
sudo nano /etc/logrotate.d/syslog # エディタでファイルを開き、missingok を追加 sudo logrotate -d /etc/logrotate.d/syslog # テスト実行 sudo logrotate /etc/logrotate.d/syslog # 手動実行
ディスカッション
コメント一覧
まだ、コメントがありません