【问题标题】:cron jobs set with whenever and accessing environment variables使用时设置和访问环境变量的 cron 作业
【发布时间】:2012-05-21 07:10:09
【问题描述】:

我有一个 cronjob,它调用需要访问环境变量(S3 凭据)的 rails 任务。我在 .bashrc 中设置了环境变量,我可以从命令行运行任务,但由于缺少凭据,cronjob 会失败。

如果我将凭据添加到 crontab,则 cronjob 会成功执行。我的 crontab 是使用when gem 生成的,因此我在 schedule.rb 中添加了 S3 凭据,如下所示:

# aws credentials
env :AWS_S3_KEY, ENV['AWS_S3_KEY']
env :AWS_S3_SECRET, ENV['AWS_S3_SECRET']

是否有办法让 cron 作业访问环境变量,而无需在 crontab 文件中专门设置它们,同时仍然使用whenge gem?

【问题讨论】:

    标签: ruby-on-rails-3 cron environment-variables whenever


    【解决方案1】:

    是的,您需要设置一些脚本文件来为 cron 设置环境变量。 See SO question

    【讨论】:

      【解决方案2】:

      您应该定义一个接受这些环境变量的自定义 job_type。一个示例 schedule.rb 将是:

      every 1.day do 
        job_type :my_custom_rake_job, "cd :path && RAILS_ENV=:environment AWS_S3_KEY=:aws_s3_key AWS_S3_SECRET=:aws_s3_secret bundle exec rake :task --silent :output"
        my_custom_rake_job 'foo:bar', :aws_s3_key => @aws_s3_key, :aws_s3_secret => @aws_s3_secret
      end
      

      现在要在更新 crontab 时运行,您可以在 bash 中执行以下操作:

      whenever --set "aws_s3_key=$AWS_S3_KEY&aws_s3_secret=$AWS_S3_SECRET" --update-crontab 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-03-11
        • 2021-10-06
        • 2018-01-03
        • 2018-04-09
        • 1970-01-01
        相关资源
        最近更新 更多