我在 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。