我使用osx并在路径中创建了一个ruby脚本:/Users/diogo/workspace/outros/crawler_trf
名称为get_news.rb
所以我尝试通过crontab执行它,并使用以下行:*/1 * * * * 'ruby /Users/diogo/workspace/outros/crawler_trf/get_news.rb' > /tmp/crawler_trf.out
并且我收到了错误:/bin/sh: ruby /Users/diogo/workspace/outros/crawler_trf/get_news.rb: No such file or directory
经过一些搜索和问题后我解决了这个问题,删除了引号,现在我的crontab看起来像这样:*/1 * * * * cd /Users/diogo/workspace/outros/crawler_trf/ && ruby get_news.rb > /tmp/crawler_trf.out
但现在我遇到了一个新的错误:
/System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- mail (LoadError)
from /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/2.0.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from get_news.rb:3:in `<main>'
我的文件的开头是:
require 'nokogiri'
require 'open-uri'
require 'mail'
我的ruby版本是2.3.0,我在.ruby-version
中指定并使用`.ruby-gemset
我通过捆绑包
安装了宝石我真的很长时间都在寻找答案,但我一无所获。
答案 0 :(得分:1)
从cron执行文件时,应始终完全指定所有文件的路径,因为cron提供的环境将与您的登录环境不同。这可能意味着将ruby
的调用替换为ruby二进制文件的完整路径(可能是/usr/local/bin/ruby
)。
尝试从cron中运行ruby -v
以查看您正在使用的版本。在我的Mac OS系统上,我有两个:
Edwards-MacBook-Air:~ emv$ /usr/bin/ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin15]
Edwards-MacBook-Air:~ emv$ /usr/local/bin/ruby -v
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin15]
一个来自操作系统,一个来自Homebrew。