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