crontab 不执行 require

crontab dont execute require

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

我通过 bundle 安装了 gem

我真的一直在寻找我的答案,但我一无所获。

在 cron 之外执行所有文件时,您应该始终完整指定所有文件的路径,因为 cron 提供的环境将与您的登录环境不同。这可能意味着将 ruby 的调用替换为 ruby 二进制文件(可能是 /usr/local/bin/ruby)的完整路径。

尝试 运行 ruby -v out of cron 看看你选择的是什么版本。在我的 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。