結論を先に書くと、「cron resourceのcommandの中身には改行をいれてはだめ」
これではまってしまう原因は、chefのreferenceに載っているexampleのせい
recipe.rb
cron "cookbooks_report" do
action node.tags.include?('cookbooks-report') ? :create : :delete
minute "0"
hour "0"
weekday "1"
user "opscode"
mailto "nharvey@opscode.com"
home "/srv/opscode-community-site/shared/system"
command %Q{
cd /srv/opscode-community-site/current &&
env RUBYLIB="/srv/opscode-community-site/current/lib"
RAILS_ASSET_ID=`git rev-parse HEAD` RAILS_ENV="#{rails_env}"
bundle exec rake cookbooks_report
}
end
あんまり深く考えずにこれだけみると、commandの値を内容をcookbooks_reportという名前のスクリプトにしてどこかに保存してくれるのかと思ってそのままつかおうとしてみたが以下のようなエラーでうまくうごかない
Chef::Exceptions::Cron: cron[crontest] (crontest::default line 98) had an error: Chef::Exceptions::Cron: Error updating state of crontest, exit: 1
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.8.2/lib/chef/provider/cron.rb:210:in `write_crontab'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.8.2/lib/chef/provider/cron.rb:140:in `block in action_create'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.8.2/lib/chef/mixin/why_run.rb:52:in `call'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.8.2/lib/chef/mixin/why_run.rb:52:in `add_action'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.8.2/lib/chef/provider.rb:149:in `converge_by'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.8.2/lib/chef/provider/cron.rb:139:in `action_create'
/opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.8.2/lib/chef/provider.rb:114:in `run_action'
:
:
以下によるとcommandの中に改行をいれてはだめらしい。
改行をなくせば回避できる