需要通過crontab調用rvm下的rake命令,折騰了很久才搞定。
環境是Ubuntu 10.04
crontab的問題有90%是和path相關的,找不到正確的ruby, 找不到正確的gems。理解了這一點就變得容易了。只要正確設置:PATH, GEM_HOME, GEM_PATH就和命令行下運營一樣了。
1. 確保你在正常的命令行下能夠運行你想要調用的腳本或者程序。
2. 在上一步成功的基礎上,查看PATH, GEM_HOME和GEM_PATH
- $ echo $PATH
- $ echo $GEM_HOME
- $ echo $GEM_PATH
3. 把上面的變量設置到一個腳本中,比如set_cron_path.sh,下面是我們列子:
- export PATH=/home/someboy/.rvm/gems/ruby-1.9.3-p125@zyt/bin:/home/someboy/.rvm/gems/ruby-1.9.3-p125@global/bin:/home/someboy/.rvm/rubies/ruby-1.9.3-p125/bin:/home/someboy/.rvm/bin:/usr/local/ruby/bin:/usr/local/ImageMagick/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
- export GEM_HOME=/home/someboy/.rvm/gems/ruby-1.9.3-p125@zyt
- export GEM_PATH=/home/someboy/.rvm/gems/ruby-1.9.3-p125@zyt:/home/someboy/.rvm/gems/ruby-1.9.3-p125@global
4. 在crontab裡面調用這個腳本,比如:
03 * * * * . /home/someboy/set_cron193_path.sh; /bin/bash -l -c 'cd /home/someboy/apps/zyt && RAILS_ENV=production rake platform_comment:get_comments --trace >>/home/someboy/apps/zyt/log/platform_comment.log 2>&1'
這樣應該就可以了。還有其他可能常見的問題,比如某些文件沒有權限等。
上面的例子會把日子輸入到相應的log中,可以查看運營的情況。
crontab自己的log寫在/var/log/syslog中