参考ページ
CHNの中の人たちブログ
EMIT-Japan WebCT レター
cron の設定ガイド
■私はCentOS環境ですが。
logファイルをlogrotateで日毎の世代管理に切り替える
今回は、日毎、14世代、圧縮しない、の条件でした。
# Rails logs:
/path/to/your/rails/home/log/*.log {
daily #毎日
missingok #ファイルが存在しなくてもエラーにしない
rotate 14 #14日分を保持
nocompress #圧縮しない
notifempty #ファイルが空なら対象外
copytruncate #元のコピーでローテファイルを作成し、元ファイルをクリアする(※重要)
create 0666 hoge hoge #権限666 グループhoeg 持ち主hogeで作成
}
以上の内容を/etc/logrotate.confの後ろに書き足す。
※重要:railsが新しいファイルではなくリネームされた方に書き込み続けてしまうため必要。
■logrotateのテスト
正常にローテーションするかチェックしてみる。
直接コマンド起動 logrotate /etc/logrotate.conf
うまくローテファイルが出来ていれば、OKなようです。
logファイルはこれでまずよしとする。
■ここまでユーザはrootですよ
3日間アクセスの無いセッションファイルを削除する。
こちらは、任意の名前(railsclean)でシェルを作成しましょう。
#!/bin/sh
FIND="/usr/bin/find"
START_DIR="/path/to/your/rails/home" # 検索を始めるディレクトリ
PATH_PATTERN="*/tmp/sessions/ruby_sess*" # 削除するパターン
CONDITION="-atime +3" # 3日以上アクセスされてないファイル
EXEC="-exec rm {} ;" #分かりにくいけど{}のあとに半角スペースは必要
#EXEC="-ls" # テスト用
${FIND} ${START_DIR} -type f -path "${PATH_PATTERN}" ${CONDITION} ${EXEC}
作成したファイルに実行権限つける
[root@mycentos ~]#chmod 755 railsclean |
cronに登録する。
crontabをみてみると以下のようになっていて、時間、日、週、月ごとに実行してくれるようになっているはず。
[root@mycentos ~]#cat crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 31 * * * * root run-parts /etc/cron.hourly #毎時31分に実行 32 6 * * * root run-parts /etc/cron.daily #毎日6時32分に実行 52 6 * * 0 root run-parts /etc/cron.weekly #毎週日曜日の6時52分に実行 12 7 1 * * root run-parts /etc/cron.monthly#毎月1日の7時12分に実行 |
今回は、/etc/cron.dailyディレクトリに先ほどのファイルを置いた。
■railscleanのテスト
明日の朝まで待ってもいいけど、テストで記述したとおりシェルが動くか確認したいので
/etc/cron.hourlyディレクトリにrailscleanを置いてみたらすぐ確認できる。