问题描述
|
我的红宝石在/ usr / local / bin中。每当找不到它,并且在我的cron文件顶部设置PATH也不起作用时,我认为是因为每当在新的bash实例中运行命令时。
#这不起作用
路径= / bin:/ sbin:/ usr / bin:/ usr / sbin:/ usr / local / sbin
#每当任何时候为以下命令生成任务时:foo
0 * * * * / bin / bash -l -c \'cd / srv / foo / releases / 20110429110637 &&脚本/ rails运行器-e production \'\\\'\'ActiveRecord :: SessionStore :: Session.destroy_recent( 15)\'\\\'\'\'
#End每当为以下命令生成任务时:foo
我怎么知道我的红宝石二进制文件在哪里?从/ usr / bin建立符号链接对我来说似乎很麻烦,但是我想那可能是唯一的选择。
这个问题在schedule.rb中提供了“ 0”作为解决方案,但是(a)我在文档中的任何地方都找不到关于该功能的任何文档(b)它似乎并没有解决提问者的问题(不幸的是,我只花了很短的周转时间就可以尝试)。
更新实际上是在此页面的底部,我将立即尝试。
更多信息
我无法修改cron命令,因为它是由
我验证了如果我用
bash -l
做一个新的bash shell,/ usr / bin / env会发现ruby很好
我只是在cron中从该用户的命令行以/ bin / bash开头尝试了确切的命令,并且它起作用了。
所以,这是非常神秘的...
解决方法
解决方案是将其放在
schedule.rb
中:
env :PATH,ENV[\'PATH\']
这是我整理的有关该主题的一些指南。
,将您的crontab重写为
0 * * * * { PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin ; export PATH ;/bin/bash -l -c \'cd /srv/foo/releases/20110429110637 && script/rails runner -e production \'\\\'\'ActiveRecord::SessionStore::Session.destroy_recent(15)\'\\\'\'\' ; }
或者,您应该尝试弄清楚为什么您的BASH shell没有选择.profile或.bash_profile中的PATH =...。
我希望这有帮助。
,正如约翰·巴希尔(John Bachir)所指出的,您可以通过env
来完成。但是,让我添加更多输入。我正在AWS Opsworks上进行部署。不幸的是,它们默认没有安装ruby管理器(RVM,Rbenv等)。
我需要做的第一件事是将SSH连接到实例中,并确定我使用的是哪个Ruby。通过在终端中执行which ruby
命令很容易。
$ which ruby
/usr/local/bin/ruby
Cron使用的是位于8英镑的红宝石。这需要更改。
在schedule.rb中,我有:
set :env_path,\'\'
env :PATH,@env_path if @env_path.present?
在本地,不需要设置“ 10”。对于大多数用户而言,唯一要做的就是执行以下操作:
bundle exec whenever --set \'environment=development\' --update-crontab
在登台/生产环境中,红宝石可能安装在其他地方。因此运行此命令可能更合适:
bundle exec whenever --set \'environment=staging&env_path=/usr/bin/local\' --update-crontab
您需要将/usr/bin/local
替换为replace14ѭ的输出。
但是,在Opsworks中,我需要创建一个自定义的Chef配方,如下所示:
node[:deploy].each do |application,deploy|
execute \'whenever\' do
user \'deploy\'
group \'nginx\'
cwd \"#{deploy[:deploy_to]}/current\"
command \"bundle exec whenever --set \'environment=#{deploy[:environment_variables][:RAILS_ENV]}&env_path=#{ENV[\'PATH\']}\' --update-crontab\"
end
end
我希望这里的信息足够清楚。