克朗不能find正确版本的ruby和捆绑gem

我有cron运行在EC2实例的rails应用程序,但它失败,错误 –

/bin/bash: bundle: command not found 

如果我运行与ubuntu用户或sudo用户的捆绑命令工作。 我已经使用crontab -e命令添加了cron。

一些故障排除我做了(与sudo显示相同的结果) –

 > which ruby /usr/local/bin/ruby > which bundle /usr/local/bin/bundle 

但是,如果将这些命令添加到crontab中的哪个ruby和哪个包中,并通过日志输出它,则会显示 –

克朗有 –

 * * * * * /bin/bash -l -c 'which ruby >> /home/ubuntu/logs/cron.log 2>&1' * * * * * /bin/bash -l -c 'which bundle >> /home/ubuntu/logs/cron.log 2>&1' 

输出 –

 /usr/bin/ruby /bin/bash: bundle: command not found 

所以基本上我的cron正在从系统中取出错误的ruby,我该怎么做才能纠正这个问题? 我想从我的/ usr / local / bin / ruby​​中获取ruby,然后它可以findbundle。

谢谢 !!

你可以指定完整的path,作为注释。

你也应该能够在你的crontab的顶部设置PATH:

 PATH=$PATH:/usr/bin:/bin:/usr/local/bin * * * * * ruby /home/ubuntu/scripts/ruby.rb >> /home/ubuntu/logs/cron.log 2>&1' * * * * * bundle exec unicorn >> /home/ubuntu/logs/cron.log 2>&1' 

其实,我看到你已经安装在/ usr / bin和/ usr / local / bin中的ruby。 在这种情况下,如果你想要一个特定的ruby,完全指定path。 用上面写的cron,由于PATH顺序,你将执行/ usr / bin / ruby​​而不是/ usr / local / bin / ruby​​。