Cron 无法找到正确版本的 ruby​​ 和 bundler gem

Cron 无法找到正确版本的 ruby​​ 和 bundler gem

我在 EC2 实例上为 rails 应用程序运行了 cron,但它失败并出现错误 -

/bin/bash: bundle: command not found

如果我使用 ubuntu 用户或 sudo 用户运行 bundle 命令,则有效。我已使用 crontab -e 命令添加了 cron。

我进行了一些故障排除(使用 sudo 也显示相同的结果)-

> which ruby
/usr/local/bin/ruby

> which bundle
/usr/local/bin/bundle

但是如果在 crontab 中添加这些命令作为 which ruby​​ 和 which bundle 并通过日志输出它,它会显示 -

Cron 有 -

* * * * * /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​​,然后它也可以找到 bundle。

谢谢 !!

答案1

您可以指定完整路径,正如 Thince 所述。

您还应该能够在 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​​,请完整指定路径。使用上面写的 cron,由于 PATH 顺序,您将执行 /usr/bin/ruby 而不是 /usr/local/bin/ruby。

相关内容