我正在尝试使用rbenv和cron运行ruby脚本 . 我知道我需要加载rbenv才能加载正确的ruby版本 .
我尝试过这样的选项:
- / 10 * * * * / bin / bash -c'source $ HOME / .bashrc; cd / data / app; ruby -v'>> /tmp/logfile.txt 2>&1
但由于会话不是交互式的,我没有正确的ruby版本 . 我找到了这样的例子:
15 14 1 * * export BASH_ENV = / path / to / environment && / full / path / to / bash -c'/full/path/to/rvm_script.rb'
它没有更好的工作 . 然后我写了一个加载器,它只在当前shell中加载rbenv,但它不起作用 .
- / 1 * * * * / bin / bash -c'$ HOME / .rbenv / loader.sh; cd / data / app /; ruby -v'>> /tmp/logfile.txt 2>&1
现在我正在寻找另一种加载它的方法......任何想法?
5 回答
我找到了加载rbenv的解决方案 . 使用加载器将rbenv导入PATH:
' . '在'$ HOME / .rbenv / loader.sh'很重要之前,它在当前shell中运行脚本
或者没有装载机,哪个更好:
更好的解决方案是简单地使用命令
bash -lc
命令 . 这将读取你的bash配置文件,它将设置rbenv . 从bash
手册页:即使kmmndr的答案是正确的,我也喜欢
bash -l
-approach .打开非交互式登录shell可以使事情变得更简单,因为我的Rails应用程序和Ruby脚本都在同一个用户下运行,所以开销不是问题 .
而不是
我做
如上面的答案中所述,
bash -l
将表现为您正常登录,这意味着您的rbenv环境已经设置好(只要您在.bashrc
,.bash_profile
的/etc/profile.d/*
中有相应的行) .如果您需要更多细节,我写了关于这个主题的a blog post .
对于我在Ruby中的备份脚本,我只需使用
~/.rbenv/bin/rbenv exec ruby [options] /path/to/ruby/script.rb
. 试试这个:@Kelvin的回答为我工作: