2012-05-13 2 views
2

У меня есть cronjob, который вызывает задачу rails, которая нуждается в доступе к переменным среды (учетные данные S3). У меня есть переменные окружения, установленные в моем .bashrc, и я могу запустить задачу из командной строки, но cronjob не работает из-за отсутствия учетных данных.заданий cron, заданных при каждом изменении переменных окружения

Если я добавляю учетные данные в crontab, то cronjob выполняется успешно. Мой кронтаб генерируется с когда это драгоценный камень, так что я добавил полномочия S3 в моем schedule.rb так:

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

Есть ли способ для хрон рабочих мест для доступа к переменным окружения без специально устанавливать их в файле кронтаб в то время как все еще используется всякий раз, когда камень?

ответ

0

Да, вам нужно будет настроить файл сценария, который установит переменные evniroment для cron. See SO question

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 

Теперь для запуска всякий раз, чтобы обновить кронтаб вы могли бы сделать следующее в Баш:

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