Я наткнулся на эту же проблему и обнаружил, что пример, который я использовал, имел в нем символы новой строки. Проблема заключалась в том, что поставщик cron работает crontab -u user -
, а трубы STDIN. Похоже, что он не принимает новые строки хорошо по любой причине.
В /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/provider/cron.rb
, я нашел это:
status = popen4("crontab -u #{@new_resource.user} -", :waitlast => true) do |pid, stdin, stdout, stderr|
stdin.write crontab
end
if status.exitstatus > 0
raise Chef::Exceptions::Cron, "Error updating state of #{@new_resource.name}, exit: #{status.exitstatus}"
end
Как ни странно, работает ваш пример, кажется, работает для меня, и создает пустую запись кронтаб для корня:
[email protected]:~# crontab -l
# Chef Name: name_of_cron_entry
[email protected]
* 8 * * 6
Это говорит о том, чтобы мне что вы используете другую версию шеф-повара gem & cron provider.
Таким образом, в зависимости от версии шеф-самоцвет, который вы используете, это может быть this bug
Для справки, пример того, что не работает для меня было основано на этом:
cron "cookbooks_report" do
action node.tags.include?('cookbooks-report') ? :create : :delete
minute "0"
hour "0"
weekday "1"
user "opscode"
mailto "[email protected]"
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 %Q{
cd /path/to/src/my-project &&
bundle exec my_script.rb
}
были 2 исправления, которые работали для меня:
- Использование
command 'cd /path/to/src/my-project && bundle exec my_script.rb'
- Изменение от
cron
поставщика к поставщику cron_d
от cron cookbook
Примечание: Я не думаю, что в документации либо поставщик в повара правильно, однако ... newlines are not supported in the crontab format если они сбрасываются с обратной косой чертой \
. В моем тестировании со вторым исправлением выше результирующий crontab недействителен и имел новые строки между командами, которые не были экранированы.
Этот рецепт пытается изменить cron для пользователя с именем «opscode», который, я считаю, отсутствует в вашей среде. – akiva
@akiva: Я скопировал пример из [документации шеф-повара] (https://docs.chef.io /resource_cron.html), 'user 'opscode" - это то, что они установили в качестве примера. Они с тех пор изменили этот пример на «user» getchef «... ... Когда я его протестировал, я, очевидно, изменил его, чтобы он соответствовал пользователю, который существовал для моего варианта использования. – TrinitronX