cron作业随时设置并访问环境变量

时间:2012-05-13 14:24:14

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

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

如果我将凭据添加到crontab,则cronjob会成功执行。我的crontab是随每个gem生成的,所以我在schedule.rb中添加了S3凭据,如下所示:

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

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

2 个答案:

答案 0 :(得分:3)

您应该定义一个接受这些环境变量的自定义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 

答案 1 :(得分:0)

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