2011-08-28 73 views
2

我有一个艰难的时间用cron和RVM执行脚本/ runner。我相信问题在于跑步者执行前没有设置rvm环境。RVM isnt设置环境与cron

当前我投掷错误 /bin/sh:1.sql:命令未找到 这比我以前得到的更多,所以我想这很好。

我已阅读此主题Need to set up rvm environment prior to every cron job但即时通讯仍然没有真正得到它。我认为部分问题是错误报告。

这是我迄今为止的跑步者。

*/1 * * * * * /bin/bash -l -c 'rvm use [email protected]; 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 [email protected]; cd development/app/my_app2310 && script/runner -e development "Mailer.find_customer"' 

这也没有什么区别。我没有错误。没有。

任何人都可以看到我做错了吗?

P.S我希望我的代码格式工作。

回答

5

您可以尝试将您想要运行的代码放在单独的脚本中,然后使用rvm_cron_runner

所以把你的行为在一个名为/path/cron_job

rvm use [email protected] 
cd development/app/my_app2310 && script/runner -e development "Mailer.find_customer" 

和文件,然后在你的crontab写

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

的差异:

  • 这并不启动单独的外壳
  • 使用参数在rvm_cron_runner

,如果您使用.rvmrc文件,你甚至可以放下rvm use ...线,我想。

+0

哼。不幸的是,它似乎没有什么区别。我现在有三个文件。 cron_job,rvm_cron_runner和cron_test.txt。 cron_test.txt通过crontab crontest.txt执行。似乎也没有错误要回报。 –

+0

我得到了这个工作。它必须与我执行crontab的方式有关。谢谢。 –

4

你不需要编写第二个cron runner(遵循这个逻辑,你不妨写第三个cron runner runner)。请保持简单。所有你需要做的就是配置你的cron作业来启动一个bash shell,并且让这个bash shell加载你的环境。

在你的脚本不应该直接引用红宝石可执行文件的shebang行,但RVM的红宝石:

#!/usr/bin/env ruby 

这指示脚本加载环境和运行Ruby,我们将与命令行rvm加载。

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

SHELL=/path/to/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' 

Full blog post on the subject