Mi sono imbattuto in questo stesso problema e ho scoperto che l'esempio che stavo usando aveva una nuova riga. Il problema era che il provider di cron esegue crontab -u user -
e pipe STDIN per il processo. Sembra che non accetti newlines per qualsiasi motivo.
In /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/provider/cron.rb
, ho trovato questo:
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
Stranamente, in esecuzione il tuo esempio sembra funzionare per me, e crea una voce crontab vuoto per root:
[email protected]:~# crontab -l
# Chef Name: name_of_cron_entry
[email protected]
* 8 * * 6
Ciò suggerisce a me che stai utilizzando una versione diversa dello chef gem & cron provider.
Quindi, a seconda della versione del gioiello cuoco che si sta utilizzando, potrebbe essere this bug
Per riferimento, l'esempio che non ha funzionato per me era basato su questo:
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
Il comando stavo correndo era:
command %Q{
cd /path/to/src/my-project &&
bundle exec my_script.rb
}
C'erano 2 correzioni che hanno lavorato per me:
- Usa
command 'cd /path/to/src/my-project && bundle exec my_script.rb'
- Passaggio da
cron
fornitore a fornitore cron_d
dal cron cookbook
Nota: Non credo la documentazione per entrambi i provider chef è corretto però ... newlines are not supported in the crontab format a meno che non sono sfuggiti con una barra rovesciata \
. Nel mio test con la seconda correzione di cui sopra, il crontab risultante non era valido e aveva una nuova riga tra i comandi che non erano stati sfuggiti.
questa ricetta prova a modificare il cron per un utente chiamato 'opscode' che, credo, manca all'ambiente – akiva
@akiva: ho copiato l'esempio da [documentazione Chef] (https://docs.chef.io /resource_cron.html), "utente" opscode "' è quello che avevano impostato come esempio. Da allora hanno cambiato questo esempio in "utente" getchef "' ... Quando l'ho provato, ovviamente l'ho cambiato per adattarlo a un utente che esisteva per il mio caso d'uso. – TrinitronX