设置路径以便在cron中任何时候都可以找到红宝石

问题描述

| 我的红宝石在/ 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
我希望这里的信息足够清楚。