我在schedule.rb中设置了一个cron作业,它只执行一个自定义rake文件。这是我的schedule.rb:
set :environment , :development
every 2.minutes do
rake "runpy" , :output => {:error => "/home/aditya9509/Desktop/rubystack-2.0.0-33/projects/myApp/log/error.log" , :standard => "/home/aditya9509/Desktop/rubystack-2.0.0-33/projects/myApp/log/cron.log"}
end
请注意,runpy是一个自定义rake文件,使用以下命令从终端运行时它可以正常工作:
rake runpy
我已将标准输出设置为cron.log并将错误输出设置为error.log 运行cron作业时,error.log中没有打印错误,但cron .log中的内容如下:
In Gemfile:
rails (= 4.2.4) depends on
bundler (< 2.0, >= 1.3.0)
Current Bundler version:
bundler (1.0.15)
所以我使用命令
检查了当前的Bundler版本bundler --version
输出
Bundler version 1.11.2
此外,我想我会检查可用的捆绑包列表,以便我可以卸载cron使用的1.0.15版本,以便它自动使用1.11.2版本。我运行了以下命令:
gem list | grep "bundler"
令我惊讶的是,我的系统上没有安装cron使用的1.0.15版本。以下是上述命令的输出:
bundler (1.11.2, 1.3.6)
hoe-bundler (1.2.0)
你知道发生了什么吗?我不确定哪些信息是相关的,所以让我知道,我将相应地更新我的问题。我正在使用when gem来设置一个cron作业。
答案 0 :(得分:0)
Cron不会在交互式shell中运行,因此不会加载.bashrc。如果您正在使用RVM或rbenv或类似的东西,那么cron可能正在使用系统Ruby,而不是您自己安装的最新Ruby。
要对此进行测试,请尝试从cron运行which ruby
或ruby -v
。是你的期望吗?
如果没有,请尝试使用bin/rails
文件顶部的shebang强制Rails使用正确的ruby版本。例如,如果您使用的是ruby 2.2.4:
位于bin / rails的顶部
#!/Users/<username>/.rvm/rubies/ruby-2.2.4/bin/ruby
显然,替换你用于Ruby的任何路径。