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です.

投稿者:

ytoki

技術系の話題に雑食な院生は15年からエンジニアをやっています。 /Rails/Android/MATLAB/Ruby/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です