bundle exec 不能与 crontab 一起使用

Posted

技术标签:

【中文标题】bundle exec 不能与 crontab 一起使用【英文标题】:bundle exec not working with crontab 【发布时间】:2013-11-18 20:36:26 【问题描述】:

我正在尝试使用 crontab 执行以下 shell 脚本:

#!/bin/sh
cd /mnt/voylla-production/current
bundle exec rake maintenance:last_2_days_orders
bundle exec rake maintenance:send_last_2_days_payment_dropouts

crontab 条目是

0 16 * * * /mnt/voylla-production/releases/20131031003111/voylla_scripts/cj_4pm.sh

我在邮件中收到以下错误消息:

/mnt/voylla-staging/current/voylla_scripts/cj_4pm.sh: line 3: bundle: command not found
/mnt/voylla-staging/current/voylla_scripts/cj_4pm.sh: line 4: bundle: command not found

当我手动运行命令时,我没有收到错误消息。不知道这里发生了什么。谁能指出来。

谢谢

【问题讨论】:

您使用的是 RVM 还是类似的东西? Cron 任务在与您的 shell 不同的环境中执行。红宝石和宝石的路径设置不正确。 所以谷歌搜索“RVM crontab”:) @SergioTulentsev :感谢您的帮助,我应该可以从这里获取它。:) 我认为您应该使用捆绑包的完整路径。让我们尝试在 app 文件夹中运行“which bundle”,您将获得 bundle 命令的完整路径,然后在 crontab 中使用它。 【参考方案1】:

我们需要为我们的包设置正确的路径:

#!/bin/sh
cd /mnt/voylla-production/current
/home/youruser/.rbenv/shims/bundle exec rake maintenance:last_2_days_orders

【讨论】:

【参考方案2】:

在 crontab 中正确设置所有环境的一个好技巧是使用/bin/bash -l

0 16 * * * /bin/bash -l -c '/mnt/voylla-production/releases/20131031003111/voylla_scripts/cj_4pm.sh'

-l 选项将调用完整的登录 shell,从而读取您的 bashrc 文件及其执行的任何路径/rvm 设置。

如果您想简化您的 crontab 管理并使用此技巧 - 以及其他技巧 - 而无需考虑它们,您可以使用 Whenever gem。它也与 capistrano 配合得很好,如果你使用它,在部署时重新生成 crontab。

【讨论】:

【参考方案3】:

cron 使用的用户没有正确的环境。 您可以告诉 cron 使用哪个用户。对于 bash 脚本,您可以这样做:

#!/bin/bash --login
source /home/user/.bashrc
rvm use 2.0.0@gemset #if you use rvm
cd /path/to/project && bundle exec xyz

【讨论】:

这也是一个很好的答案!,你甚至可以添加更多的行。

以上是关于bundle exec 不能与 crontab 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

crontab 不能与 celery 多启动一起使用

使用 bundle exec rake 还是只使用 rake?

bundle exec rake 是啥意思?

Ruby bundle exec

Rails--bundle exec rake db:migrate

我无法使用 'bundle exec rspec' 执行 rspec