crontab不执行require

时间:2016-08-10 22:45:26

标签: ruby macos crontab

我使用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

中指定的gemset

我通过捆绑包

安装了宝石

我真的很长时间都在寻找答案,但我一无所获。

1 个答案:

答案 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。