chefでcron設定

railsだとwhenever + capistranoとかつかってcron回すのが一般的かと思うけど、chef単体でも簡単にcron回せた。

 

cron "cron_name" do
action :create
minute '10'
hour '10'
day '*'
user "root"
command %w{
/bin/bash -l -c 'cd /var/www/my-app/current &&
RAILS_ENV=production bin/bundle exec rake my_rake_task --silent >> log/cron.log 2>> log/error.log'
}.join(' ')
end

 

毎日10:10にmy_rake_taskが走る。

chefでcookするたびにcronを新規作成するわけではなく更新してくれるので、意図よりcronが増えてしまうことはない。

.bash_profileに環境変数定義していたので、/bin/bash -l -cで書かないと環境変数読み込んでくれなかった。

 

参考:

cron — Chef Docs