Ich stolperte in dasselbe Problem und fand, dass das Beispiel, das ich verwendete, Zeilenumbrüche darin hatte. Das Problem war, dass der Cron-Provider crontab -u user -
und Pipes STDIN zum Prozess ausgeführt wird. Es scheint, dass es Newline aus irgendeinem Grund nicht gut akzeptiert.
In /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/provider/cron.rb
, fand ich diese:
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
Merkwürdigerweise scheint Ihr Beispiel läuft für mich zu arbeiten, und erstellt einen leeren crontab-Eintrag für root:
[email protected]:~# crontab -l
# Chef Name: name_of_cron_entry
[email protected]
* 8 * * 6
Dies ist für mich schon sagt dass Sie eine andere Version des Küchenchefs & Cron-Anbieter verwenden.
Also, je nach Version des Kochs Juwel Sie verwenden, könnte es this bug
Als Referenz sein, das Beispiel, das nicht für mich wurde auf der Grundlage eines dieser:
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
Der Befehl, ich hatte war:
command %Q{
cd /path/to/src/my-project &&
bundle exec my_script.rb
}
Es waren zwei Updates, die für mich gearbeitet:
- Verwenden
command 'cd /path/to/src/my-project && bundle exec my_script.rb'
- Wechsel von
cron
Provider cron_d
Anbieter aus dem cron cookbook
Hinweis: Ich glaube nicht in der Dokumentation zu Provider in Koch jedoch korrekt ist ... newlines are not supported in the crontab format es sei denn, sie sind mit einem Backslash \
ausgeblendet. In meinem Test mit dem zweiten Fix oben war die resultierende Crontab ungültig und hatte Zeilenumbrüche zwischen Befehlen, die nicht maskiert wurden.
Dieses Rezept versucht, den Cron für einen Benutzer namens 'opscode' zu ändern, der meiner Meinung nach in Ihrer Umgebung fehlt. – akiva
@akiva: Ich habe das Beispiel aus [Chef documentation] kopiert (https://docs.chef.io /resource_cron.html), 'user" opscode "' ist das, was sie als Beispiel gesetzt haben. Sie haben seitdem dieses Beispiel in 'user" getchef geändert "... Als ich es getestet habe, habe ich es offensichtlich geändert, um es einem Benutzer anzupassen, der für meinen Anwendungsfall existierte. – TrinitronX