カスタムメイドのサードパーティがあるサーバーの管理を引き継いでいますRails app。アプリ開発者は、Rubyログファイルが大きくなり、私に次のリンクを示しました:- https://stackoverflow.com/questions/4883891/Ruby-on-Rails-production-log-rotation
ログは/ root/production/app/logにあります。このフォルダには、.logで終わるファイルがいくつか含まれています。現在のログファイルのサイズは約2GBで、フォルダーには「logname.log.2013_01_18.bz2」の形式のアーカイブログファイルもあります。
Sshコマンドの履歴を検索して、アーカイブファイルの作成に使用されたコマンドが表示されるかどうかを確認しましたが、コマンドはそれほど遠くに戻りません。 「cat/var/lib/logrotate/status」も実行しましたが、logrotateが上記のフォルダーのログをローテーションしなかったようではありません。
基本的に:
現時点では、すべてのログファイルを破棄せずに保持する必要があります。ローテーションを試みる前にログをバックアップするなど、ログのローテーションに関連する懸念事項に関する情報は大歓迎です。
logrotate
はシステムがログをローテーションするために使用されるため、2つの選択肢があります。これらのアプリログのローテーションをシステムローテーションに組み込むか、独自にセットアップして、手動で実行するか、rootユーザーのcrontabから実行することができます(Railsアプリがディレクトリとして与えられた場合、rootとして実行されると仮定しますは/root/...
)です。
システムの既存のログローテーション内でログローテーションを設定するには、/etc/logrotate.d
ディレクトリに新しいファイルを追加するだけです。それをrailsapp.conf
と呼びます。そこで他の例を使用して作成します。また、logrotate
のmanページを参照してください。
logrotate
の独自のインスタンスを実行する場合は、それを実行するためのコマンドラインスイッチを指定するだけです。
/etc/logrotate.conf
/root/Rails_logrotate.conf
のコピーを作成しますそれを実行します
# 1st time
$ logrotate -d -f -s $HOME/my_logrotate.state logrotate.conf
# afterwards
$ logrotate -d -s $HOME/my_logrotate.state logrotate.conf
問題がなければ、-d
スイッチなしでこれらのコマンドを再実行できます。これはデバッグのみを目的としており、実際には何のタスクも実行せず、何を実行するかを示すだけです。
$ logrotate -s $HOME/my_logrotate.state logrotate.conf
-v
スイッチを使用したときに表示される出力と同様に、-d
スイッチを使用して詳細にすることもできます。
このログファイルから始めます。
$ dd if=/dev/zero of=afile bs=1k count=10k
10240+0 records in
10240+0 records out
10485760 bytes (10 MB) copied, 0.0702393 s, 149 MB/s
$ ll afile
-rw-rw-r-- 1 saml saml 10485760 Aug 6 14:37 afile
$ touch -t 201307010101 afile
$ ll afile
-rw-rw-r-- 1 saml saml 10485760 Jul 1 01:01 afile
logrotate
を実行します
$ logrotate -v -f -s $HOME/my_logrotate.state logrotate.conf
reading config file logrotate.conf
reading config info for /home/saml/afile
Handling 1 logs
rotating pattern: /home/saml/afile forced from command line (1 rotations)
empty log files are rotated, old logs are removed
considering log /home/saml/afile
log needs rotating
rotating log /home/saml/afile, log->rotateCount is 1
dateext suffix '-20130806'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
renaming /home/saml/afile to /home/saml/afile-20130806
creating new /home/saml/afile mode = 0664 uid = 500 gid = 501
結果を確認する
$ ll afile*
-rw-rw-r-- 1 saml saml 0 Aug 6 14:40 afile
-rw-rw-r-- 1 saml saml 10485760 Jul 1 01:01 afile-20130806
これを毎週日曜日に実行するには、rootユーザーに対して次のcrontabエントリを作成します。
$ crontab -e
次の行を追加します。
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR Sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
0 0 * * Sun logrotate -v -f -s $HOME/my_logrotate.state $HOME/logrotate.conf
次に、上記を保存します。
実際の日、分、秒などを指定する代わりに、これらのタイプのショートカットを使用することもできます。
string meaning
------ -------
@reboot Run once, at startup.
@yearly Run once a year, "0 0 1 1 *".
@annually (same as @yearly)
@monthly Run once a month, "0 0 1 * *".
@weekly Run once a week, "0 0 * * 0".
@daily Run once a day, "0 0 * * *".
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *".