我正在尝试在RVM环境中运行10.5的旧PPC机器上运行一个简单的ruby脚本。
在SO上搜索,我已经按照post中的选择答案进行了搜索。
这是cron中的一行:
SHELL=/bin/bash
00 * * * * BASH_ENV=~/.bash_profile && /bin/bash -c '~/deggy/onlineGW.rb'
此命令在用户sam的根目录下以Bash运行。
这是我的剧本的重要部分:
#!/usr/bin/env ruby
require 'open-uri'
require 'nokogiri'
...
以下是来自cron的错误输出:
X-Cron-Env: <SHELL=/bin/bash>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=sam>
X-Cron-Env: <USER=sam>
X-Cron-Env: <HOME=/Users/sam>
Date: Mon, 6 Jan 2014 03:15:00 -0600 (CST)
/Users/sam/deggy/onlineGW.rb:3:in `require': no such file to load -- nokogiri (LoadError)
好的,因为我正在运行RVM,所以我将默认的ruby设置为1.9.3,正如我上面提到的,该命令在终端中执行但不在cron中执行。还有其他环境在发挥作用吗?
很明显,我有一些东西可以忽略。帮帮我看看,山姆
答案 0 :(得分:30)
答案 1 :(得分:7)
我配置了几种不同的操作系统来处理几种CRON风格和RVM。
我首先尝试RVM's official解决问题,但在FreeBSD和Gentoo下无效。我必须手动添加所有相关路径,如下所示,但首先输入crontab -e
以启动crontab编辑器[1]:
# atmat's crontab configuration
SHELL=/bin/bash
PATH=/home/atma/.rvm/gems/ruby-1.9.3-p0/bin:/home/atma/.rvm/gems/ruby-1.9.3-p0@global/bin:/home/atma/.rvm/rubies/ruby-1.9.3-p0/bin:/home/atma/.rvm/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i486-pc-linux-gnu/gcc-bin/4.5.3
RUBYLIB=/home/atma/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1
GEM_HOME='/home/atma/.rvm/gems/ruby-1.9.3-p0'
GEM_PATH='/home/atma/.rvm/gems/ruby-1.9.3-p0:/home/atma/.rvm/gems/ruby-1.9.3-p0@global'
RUBYOPT=rubygems
%nightly,mail(no) * 8-9 /home/atma/.rvm/rubies/ruby-1.9.3-p0/bin/ruby /usr/local/bin/morula -s username update
以上示例在Gentoo GNU / Linux下使用fcron一个更灵活,美观且功能强大的标准cron解决方案,但可以与任何cron一起使用。
[1]此命令将使用您的默认系统编辑器打开crontab
。
答案 2 :(得分:0)
要为cron
作业加载默认的RVM ruby环境,以下是我为用户模式RVM设置的内容,假设用户为ohho
,主文件夹为/home/ohho
。要进行编辑,请在命令行中输入crontab -e
:
MAILTO=""
SHELL=/bin/bash
BASH_ENV=/home/ohho/.bash_profile
HOME=/home/ohho
* * * * * rails -v > /home/ohho/env.txt
最后一行用于测试rails
(如果已安装)可以正确调用。您还应该检查~/.bash_profile
是否加载RVM环境(这是bash的默认设置)。
可以在Daniel's answer中找到SHELL
和BASH_ENV
的详细说明。