在cron中设置路径,以便它可以找到ruby

Joh*_*hir 17 ruby bash cron sh whenever

我的红宝石在/ usr/local/bin中.无论何时找不到它,并且在我的cron文件顶部设置PATH也不起作用,我认为因为无论何时在新的bash实例中运行命令.

# this does not work
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin

# Begin Whenever generated tasks for: foo
0 * * * * /bin/bash -l -c 'cd /srv/foo/releases/20110429110637 && script/rails runner -e production '\''ActiveRecord::SessionStore::Session.destroy_recent(15)'\'''

# End Whenever generated tasks for: foo

我怎么能告诉我的ruby二进制文件在哪里?从/ usr/bin创建一个符号链接对我来说似乎很混乱,但我想这可能是唯一的选择.

这个问题提供了env :PATH, "..."在schedule.rb作为一个解决方案,但(一)我无法找到该功能的任何文档中的文档(二)它似乎并没有已经解决了提问者的问题,任何地方(不幸的是它需要不平凡转机时间让我试试吧). 实际更新它在这个页面的底部,我现在就试试吧.

更多信息

  1. 我无法修改cron命令,因为它是由when生成的
  2. 我验证了如果我用一个新的bash shell bash -l,/ usr/bin/env发现ruby就好了
  3. 我刚刚在cron中尝试使用/ bin/bash中的确切命令,从该用户的命令行开始,它运行正常.

所以,这很神秘......

Joh*_*hir 26

解决方案是将其放入schedule.rb:

env :PATH, ENV['PATH']
Run Code Online (Sandbox Code Playgroud)

这是我在这个主题上整理的一个小指南.

  • 如果你想要你可以将其修改为"env:PATH,ENV ['PATH']"来自动设置而不是硬编码. (3认同)