我的红宝石在/ usr / local / bin中 . whenever也可以't find it, and setting PATH at the top of my cron file doesn'工作,我想是因为每当在新的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创建一个符号链接对我来说似乎很混乱,但我想这可能是唯一的选择 .
This question在schedule.rb中提供了 env :PATH, "..."
作为解决方案,但是(a)我似乎已经解决了提问者的问题(不幸的是,我只需要尝试就可以获得非平凡的周转时间) . update 实际上it is in the bottom of this page,我现在就试试吧 .
more info
-
我可以随时生成't modify the cron command because it'
-
我验证如果我用
bash -l
创建一个新的bash shell,/ usr / bin / env发现ruby就好了 -
我刚刚在cron中尝试了命令,从/ bin / bash开始,从该用户的命令行开始,它运行正常 .
所以,这很神秘......
3 回答
将你的crontab重写为
或者你应该试着弄清楚为什么你的BASH shell没有选择PATH = ...几乎可以肯定你的.profile或.bash_profile .
我希望这有帮助 .
解决方案是将其放在
schedule.rb
中:Here's a little guide I put together on the topic.
正如John Bachir指出的那样,你可以通过
env
来做到这一点 . 但是,让我添加更多输入 . 我正在AWS Opsworks上部署 . 不幸的是,他们默认没有安装ruby管理器(RVM,Rbenv等) .我需要做的第一件事是SSH进入实例并找出我正在使用的ruby . 通过在终端中执行
which ruby
命令,这很容易 .Cron正在使用位于
/usr/bin/ruby
的红宝石 . 这需要改变 .在schedule.rb中,我有:
在本地,不需要设置
env_path
. 对于大多数用户来说,唯一要做的就是执行以下操作:在暂存/ 生产环境 环境中,ruby可能安装在其他地方 . 所以运行这个可能更合适:
您需要将
/usr/bin/local
替换为echo $PATH
的输出 .但是,在Opsworks中,我需要创建一个自定义Chef配方,如下所示:
我希望这里的信息足够清楚 .