我正在尝试设置 crontab 以与 cucumber 配合使用。到目前为止,我能够让 crontab 执行 ruby 命令,但不能执行 cucumber 命令。
这是我在 crontab 中的内容:
- ~/test.sh > ~/out.log 2> err.log
如果我在 test.sh 中执行此操作,它可以正常工作:
/ruby 的绝对路径 ~/test.rb
但是,如果我在 test.sh 中执行此操作,则会失败:
/绝对路径到黄瓜〜/ test.feature
这是它在 err.log 中打印出的内容:
没有要加载的文件——capybara/cucumber(LoadError)
但是,如果我在终端中运行 test.sh (/Absolute-path-to-cucumber ~/test.feature),它可以正常工作。
因此,我认为 cron 和终端使用的 ruby 版本不同(因此存在环境问题)。
当我在终端中执行 $ruby -rpp -e 'pp ENV' 时,它给了我这个:
"_"=>"/用户/名称/.rvm/rubies/ruby-1.9.3-p392/bin/ruby"
当我在 cron 中执行相同的命令时,它在日志文件中给出了以下内容:
“_”=>“/usr/bin/ruby”
因此,看起来 cron 使用的是系统 ruby (1.8.7),而终端使用的是用户 ruby (1.9.3)。我尝试了所有我能找到的方法让 cron 使用 ruby 1.9.3,但到目前为止还没有成功。
有人能给我一些提示或指示,告诉我下一步该怎么做吗?谢谢你的帮助。
答案1
cron 的默认路径是/usr/bin:/bin
,默认 shell 是/bin/sh
。它不读取任何配置文件,如 .bash_profile。
你能添加. ~/.rvm/scripts/rvm
脚本吗?
或者bash -lc
启动一个读取配置文件(如.bash_profile)的登录shell。
* * * * * bash -lc '~/test.sh > ~/out.log 2> ~/err.log'