RVM没有用cron设置环境

我正忙着用cron和RVM执行脚本/运行器。 我相信问题在于在运行跑步者之前没有设置rvm环境。

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

我已经读过这个post需要在每个cron作业之前设置rvm环境,但我还是没有真正得到它。 我认为部分问题是错误报告。

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

*/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"' 

这也没有区别。 我没有错。 没有。

谁能看到我做错了什么?

PS我希望我的代码格式化工作。

您是否可以尝试将要运行的代码放在单独的脚本中,然后使用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 runner(遵循那个逻辑,你也可以写第三个cron runner runner)。 请保持简单。 您需要做的就是配置您的cron作业以启动bash shell,并使该bash shell加载您的环境。

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

 #!/usr/bin/env ruby 

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

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

 SHELL=/path/to/bash 

这将确保从bash中生成cron作业。 但是,您的环境仍然缺失,因此要指示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' 

关于这个主题的完整博客文章

你可以使用rvm包装器:

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

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