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