ログを回転させないlogrotate


24

このlogrotate構成があり、Ubuntu 10.04で実行しています。

/var/log/mysql/mysql-slow.log {
    daily
    rotate 3
    compress
    notifempty
    missingok
    create 660 mysql adm
    postrotate 
    if test -x /usr/bin/mysqladmin && \
       /usr/bin/mysqladmin  ping &>/dev/null
    then
       /usr/bin/mysqladmin  flush-logs
    fi
endscript

}

これを昨日/etc/logrotate.dに入れましたが、今日はログがローテーションされませんでした。

以下は私がやったことです:

  1. ログが実際に/var/log/mysql/mysql-slow.logにあることを確認しました
  2. ルートとして実行するとmysqladmin行が正常に機能する
  3. mysqlはmysql-slow.logに書き込むことができます

私がこれをしたとき:

$ logrotate -d -f mysql-slow

reading config file mysql-slow
reading config info for /var/log/mysql/mysql-slow.log 

Handling 1 logs

rotating pattern: /var/log/mysql/mysql-slow.log  forced from command line (3 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/mysql/mysql-slow.log

log needs rotating
rotating log /var/log/mysql/mysql-slow.log, log->rotateCount is 3
dateext suffix '-20120329'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /var/log/mysql/mysql-slow.log.3.gz to /var/log/mysql/mysql-slow.log.4.gz     (rotatecount 3, logstart 1, i 3), 
renaming /var/log/mysql/mysql-slow.log.2.gz to /var/log/mysql/mysql-slow.log.3.gz (rotatecount 3, logstart 1, i 2), 
renaming /var/log/mysql/mysql-slow.log.1.gz to /var/log/mysql/mysql-slow.log.2.gz (rotatecount 3, logstart 1, i 1), 
renaming /var/log/mysql/mysql-slow.log.0.gz to /var/log/mysql/mysql-slow.log.1.gz (rotatecount 3, logstart 1, i 0), 
renaming /var/log/mysql/mysql-slow.log to /var/log/mysql/mysql-slow.log.1
creating new /var/log/mysql/mysql-slow.log mode = 0660 uid = 20004 gid = 4
running postrotate script
running script (multiple) with arg /var/log/mysql/mysql-slow.log : " 
    if test -x /usr/bin/mysqladmin && \
       /usr/bin/mysqladmin &>/dev/null
    then
       /usr/bin/mysqladmin flush-logs
    fi
"
compressing log with: /bin/gzip
removing old log /var/log/mysql/mysql-slow.log.4.gz
  1. logrotateが成功したことを示すログはどこにありますか?私は問題があったと言う何かがあるかどうかを見たいです。
  2. logrotateが機能しない理由に関するアイデアはありますか?

手作業で実行すると機能しますか?されてcrond実行していますか?
カイルスミス

はい、logrotate -f mysql_slow_queryを意味する場合は動作します。そして、crondが実行されています。
カルメン

そのログファイルを処理することになっている別の構成が既にないことを確認しますか?おそらくmysql-server?を実行しますgrep '/var/log/mysql' /etc/logrotate.d/*
ゾレダチェ

私は、そのコマンドを実行し、唯一の私の設定では、ログ/ mysqlの/には/ var何かをするとして表示
カルメン

Ubuntuセットアップで毎日のcronジョブが実行されるのはいつですか?その情報は、/etc/crontabファイル内ので終わる行にあります/etc/cron.daily )。たぶん、その日のcron日次ジョブが既に実行された後にlogrotate構成を作成したのでしょうか?
-ricmarques

回答:


47

よくある問題は、毎日logrotate.dエントリを最初にセットアップしたとき、最初の日はローテーションしません。時間ベースのローテーション(毎日/毎週/毎月)を使用すると、logrotateはファイルを/var/lib/logrotate/status(または/var/lib/logrotate.statusRHELシステムで)見た最後の日付の日付スタンプを走り書きします。

走り書きされた日付は、logrotate「毎日」のローテーションを比較するために使用される将来の実行からの参照日付になります。デフォルトのcronジョブは毎日実行されるため、これは通常、毎日のジョブの問題にすぎません。

この問題は2つの方法で回避できます。

  1. 走る sudo logrotate -f /etc/logrotate.d/<my rotate job>

    • これにより、日付がステータスファイルに落書きされ、ログがローテーションされます

  2. /var/lib/logrotate/status行を手動で編集して追加します。

    "/var/log/my_special.log" 2013-4-8

    • 今日または前の日付に設定します。次回の実行で実行されるはずです。

チャンピオンのように動作します!
セス

6
実際にはありません使用しているときに回転ログを-f(私のRH誘導体で少なくとも)。
-bufh

12
-fForce Rotationの場合-d、Debugの場合、debugはドライランを意味するため、実際に-dはオンの間に変更は行われません。
ThorSummoner

1
-dドライランを暗示することは注意が必要です。変更は行われず、この事実に気付くまで頭を掻きました。
アルテムルサコフスキー

5

次のSlicehostの記事によると:

Ubuntuでのlogrotateの理解-パート2
http://articles.slicehost.com/2010/6/30/understanding-logrotate-on-ubuntu-part-2

... /var/lib/logrotate/statusファイルには、各ログファイルが最後にローテーションされたときの情報が保存されますlogrotateのマンページには、「状態ファイル」と呼ばれていると述べています。

ServerFaultには、役に立つかもしれない別の議論があります:

logrotateは「毎日」を正確にどのように処理しますか?

その議論の中で、「MadHatter」は、以下に関して、「ステータス」(状態)ファイルに関して述べています。

"各ファイルには1行があります。これは、最後にローテーションされた日付です。現在の日付とファイル内の日付の間の日数を指定すると、特定のファイルのローテーションが必要な日付でlogrotateを実行した場合(毎日1回、毎週7回など)、ファイルはローテーションされます。

これがお役に立てば幸いです。


0

mysqladminユーザーまたはパスワードが必要な場合、/root/.my.cnf変更せずに構成から読み取ることはできません。

出力をロガーにパイプして、何が起こっているのかを確認してください。

  postrotate
      # just if mysqld is really running
      if test -x /usr/bin/mysqladmin && \
         /usr/bin/mysqladmin ping &>/dev/null
      then
         env HOME=/root/ /usr/bin/mysqladmin flush-logs 2>&1 | logger
      else
         logger "mysqladmin ping failed so not rotating mysql logs"
      fi
  endscript

MySQLは回転後にエラーを新しいファイルに記録しませんか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.