2

我有一个 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 文件中专门设置它们,同时仍然使用when gem?

4

2 回答 2

4

您应该定义一个接受这些环境变量的自定义 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 
于 2012-09-14T18:18:46.717 回答
0

是的,您需要设置一些脚本文件来为 cron 设置 evniroment 变量。请参阅 SO 问题

于 2012-05-13T15:50:12.487 回答