Tôi tình cờ gặp vấn đề tương tự này và thấy rằng ví dụ tôi đang sử dụng có dòng mới trong đó. Vấn đề là nhà cung cấp cron chạy crontab -u user -
và đường ống STDIN cho quy trình. Có vẻ như nó không chấp nhận dòng mới vì bất kỳ lý do gì.
Trong /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/provider/cron.rb
, tôi thấy điều này:
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
Lạ lùng thay, chạy ví dụ của bạn dường như làm việc cho tôi, và tạo ra một mục crontab trống cho root:
[email protected]:~# crontab -l
# Chef Name: name_of_cron_entry
[email protected]
* 8 * * 6
này gợi ý với tôi bạn đang sử dụng một phiên bản khác của nhà cung cấp đầu bếp gem & cron.
Vì vậy, tùy thuộc vào phiên bản của đá quý đầu bếp bạn đang sử dụng, nó có thể là this bug
Để tham khảo, ví dụ mà không làm việc đối với tôi là dựa trên một điều này:
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
lệnh tôi đã chạy là:
command %Q{
cd /path/to/src/my-project &&
bundle exec my_script.rb
}
có 2 bản sửa lỗi đã làm việc cho tôi:
- Sử dụng
command 'cd /path/to/src/my-project && bundle exec my_script.rb'
- Thay đổi từ
cron
nhà cung cấp để cung cấp cron_d
từ cron cookbook
Lưu ý: Tôi không nghĩ rằng các tài liệu hướng dẫn cho một trong hai nhà cung cấp trong bếp là đúng tuy nhiên ... newlines are not supported in the crontab format trừ khi họ được thoát bằng dấu gạch chéo ngược \
. Trong thử nghiệm của tôi với sửa chữa thứ hai ở trên, kết quả là crontab không hợp lệ và có dòng mới giữa các lệnh không được thoát.
công thức này cố sửa đổi cron cho người dùng gọi là 'opscode' mà tôi tin là thiếu ở môi trường của bạn – akiva
@akiva: Tôi đã sao chép ví dụ từ [Chef documentation] (https://docs.chef.io /resource_cron.html), 'user" opscode "' là những gì họ đã đặt làm ví dụ. Họ đã thay đổi ví dụ này thành 'người dùng 'getchef" '... Khi tôi kiểm tra nó, tôi rõ ràng đã thay đổi nó cho phù hợp với một người dùng đã tồn tại trong trường hợp sử dụng của tôi. – TrinitronX