【问题标题】:RVM isnt setting environment with cronRVM 不是使用 cron 设置环境
【发布时间】:2011-11-05 08:55:48
【问题描述】:

我在使用 cron 和 RVM 执行脚本/运行程序时遇到了困难。我认为问题在于在执行运行程序之前未设置 rvm 环境。

目前我正在抛出错误 /bin/sh: 1.sql: 找不到命令 这比我之前得到的要多,所以我想这很好。

我已经阅读了这个帖子Need to set up rvm environment prior to every cron job,但我仍然没有真正理解它。我认为部分问题是错误报告。

到目前为止,这是我的跑步者。

 */1 * * * * * /bin/bash -l -c 'rvm use 1.8.7-p352@2310; cd development/app/my_app2310 && script/runner -e development "Mailer.find_customer"'

根据上面的链接,我尝试制作一个 rvm_cron_runner。

我创建了一个文件并将其放入其中:

#!/bin/sh
source "/Users/dude/.rvm/scripts/rvm"
exec $1

然后我将我的 crontab 更新为此。

*/1 * * * * * /bin/bash -l -c '/Users/dude/development/app/my_app2310/rvm_cron_runner; rvm use 1.8.7-p352@2310; cd development/app/my_app2310 && script/runner -e development "Mailer.find_customer"'

这也没有什么不同。我没有错误。什么都没有。

谁能看到我做错了什么?

P.S 我希望我的代码格式有效。

【问题讨论】:

    标签: ruby-on-rails ruby cron rvm


    【解决方案1】:

    能否尝试将要运行的代码放在单独的脚本中,然后使用rvm_cron_runner

    所以将你的操作放在一个名为/path/cron_job的文件中

    rvm use 1.8.7-p352@2310
    cd development/app/my_app2310 && script/runner -e development "Mailer.find_customer"
    

    然后在你的 crontab 中写入

    1 2 * * * /path/rvm_cron_runner /path/cron_job
    

    区别:

    • 这不会启动单独的 shell
    • 使用rvm_cron_runner的参数

    如果您使用.rvmrc 文件,我认为您甚至可以删除rvm use ... 行。

    【讨论】:

    • 嗯。不幸的是,它似乎没有什么不同。我现在有三个文件。 cron_job、rvm_cron_runner 和 cron_test.txt。 cron_test.txt 通过 crontab crontest.txt 执行。似乎也没有错误可报告。
    • 我得到了这个工作。这与我执行 crontab 的方式有关。谢谢。
    【解决方案2】:

    您不需要编写第二个 cron 运行程序(按照这个逻辑,您不妨编写第三个 cron 运行程序)。请保持简单。您需要做的就是配置您的 cron 作业以启动 bash shell,并使该 bash shell 加载您的环境。

    脚本中的 shebang 行不应直接引用 ruby​​ 可执行文件,而应引用 rvm 的 ruby​​:

    #!/usr/bin/env ruby
    

    这指示脚本加载环境并运行 ruby​​,就像我们在加载了 rvm 的命令行上一样。

    在许多 UNIX 派生系统上,crontab 可以在定义要运行的作业的实际行之前有一个配置部分。如果是这种情况,您将指定:

    SHELL=/path/to/bash  
    

    这将确保 cron 作业将从 bash 生成。尽管如此,您的环境仍然丢失,因此要指示 bash 加载您的环境,您需要在配置部分添加以下内容:

    BASH_ENV=/path/to/environment (typically .bash_profile or .bashrc) 
    

    HOME 自动派生自 crontab 所有者的 /etc/passwd 行,但您可以覆盖它。

    HOME=/path/to/home
    

    在此之后,cron 作业可能如下所示:

    15 14 1 * *     $HOME/rvm_script.rb
    

    如果您的 crontab 不支持配置部分怎么办。好吧,您必须将所有环境指令与作业本身放在一行中。例如,

    15 14 1 * * export BASH_ENV=/path/to/environment && /full/path/to/bash -c '/full/path/to/rvm_script.rb'
    

    Full blog post on the subject

    【讨论】:

      【解决方案3】:

      您可以使用 rvm 包装器:

      /home/deploy/.rvm/wrappers/ruby-2.2.4/ruby
      

      来源:https://rvm.io/deployment/cron#direct

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-28
        • 2010-11-07
        • 1970-01-01
        • 2018-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多