はじめに
Railsを使っていて、なんとなしにlogディレクトリのファイルを見たらなんと一万行くらいのログが溜まっていて心配になりました。
このまま溜めっぱなしだと動作にも影響が出そうなので自動で削除したいと思いました。
環境
zsh
rails 6.1.3.7
logファイルのデータ削除
ファイルの内容を削除したい場合にはrakeタスクを実行します。
$ rake log:clear
ログ削除の自動化
gem 'whenever'
をインストールします。
これは、cronの設定を簡単に行えるライブラリです。
Gemfile
gem 'whenever'
chedule.rbファイルを作成
$ bundle exec wheneverize .
[add] writing `./config/schedule.rb'
[done] wheneverized!
ファイルを編集。
config/schedule.rb
#実行時のログファイルの置き場所指定
set :output, "#{path}/log/cron.log"
#zshで実行
set :job_template, "/bin/zsh -l -c ':job'"
#rakeコマンド実行時の設定
job_type :rake, "export PATH=\"$HOME/.rbenv/bin:$PATH\"; eval \"$(rbenv init -)\"; cd :path && RAILS_ENV=:environment bundle exec rake :task :output"
# 毎日の午後6時に実行
every 1.day, at: '6:00 pm' do
rake 'log:clear'
end
# 毎週土曜日の午前3時に実行
every :saturday, at: '3:00 am' do
# ジョブの中身
end
# 毎月1日の午前2時に実行
every '0 2 1 * *' do
# ジョブの中身
end
# 平日の午後4時30分に実行
every :weekday, at: '4:30 pm' do
# ジョブの中身
end
cronやwheneverがbundleなどを実行する際には、rbenvの設定が効いていないため
export PATH=\"$HOME/.rbenv/bin:$PATH\"; eval \"$(rbenv init -)\"
という記述をしないと、デフォルトでインストールされていたrubyのバージョンで実行されることになり、もしアプリ内で違うバージョンのrubyを使っていたとしたらエラーが発生する。
参考