Crontabを利用したRailsのモデルメソッドの定期実行

備忘録メモ.

Botもどきを作成するには,定期的にポストできるようにしなきゃいかん訳ですね.

と,いうわけでCrontabを使ってモデルメソッド実行(→ボットの投稿)するためのメモ.

参考

rails の model メソッドを簡単に daemon 化する方法
http://doruby.kbmj.com/red/20100707/rails___model___daemon__
rvm+railsなアプリケーションをcronで動かす
http://sanojimaru.com/tag/rvmrails


Cronで動かす場合,非RVM環境でRailsを動かさないといけない.
→rvm wrapper rubyのバージョン@gemsetの名前 action gem
ex.

rvm wrapper 1.8.7@rails3_n1 runner rails

Ubuntu10.04の環境だと,$HOME/bin/runner_railsが作成された.
ちなみにrunnerを動かすから・・・と思って書いたけどファイルの中身を見てもrunnerとか入ってない.
actionってこれのことじゃないのかな?(動いているみたいなのがまた謎)


[RAILS_ROOT]は対象のRailsプロジェクトのルートディレクトリ.

適当にcron.shを作成
vi [RAILS_ROOT]/batch/cron.sh

#!/bin/sh
cd [RAILS_ROOT]
$HOME/bin/runner_rails runner -e development "User.auto_post()" >> cron.log 2>&1

叩いてみる(RVMでgemsetを適用していない環境での確認が必要.)
[RAILS_ROOT]/batch/cron.sh

ログはこの場合は[RAILS_ROOT]/cron.logに出力されるので,なんかちゃんと動いてなさそうだったら中身を見てみる.
必要なGemが入ってねえよ!って趣旨のメッセージが出力されているようならGemfileに足してbundle install
※でも多分RVMのGemsetが使えてないとかそういう系の理由な気がする.
 rvm wrapper に設定したgemsetとかを確認してやり直してみるとうまくいくことも.


動くようなら,Cronの設定.
数字は,左から順に分,時,日,月,曜日.
試しに毎月毎日11時〜22時の0分に定期実行するようにすると,こうなる.
crontab -e

# m h dom mon dow command
0 11-22 * * * [RAILS_ROOT]/batch/cron.sh


ちゃんと定時に動けばOKです.