我尝试了http://docs.opscode.com/resource_cron.html#examples
给出的最简单的例子 cron "name_of_cron_entry" do
hour "8"
weekday "6"
mailto "admin@opscode.com"
action :create
end
我使用刀ssh使配方在厨师客户端上运行,客户端给出错误:
Error executing action create on resource cron[name_of_cron_entry]
Error updating state of name_of_cron_entry, exit: 1
以前有人遇到过同样的问题吗?任何解决方案?
答案 0 :(得分:11)
我偶然发现了同样的问题,发现我使用的示例中有新行。问题是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
奇怪的是,运行您的示例似乎对我有用,并为root创建一个空的crontab条目:
root@chef-test-01:~# crontab -l
# Chef Name: name_of_cron_entry
MAILTO=admin@opscode.com
* 8 * * 6
这告诉我你正在使用不同版本的厨师宝石& cron提供者。
因此,根据您使用的厨师宝石的版本,可能是this bug
作为参考,对我不起作用的例子是基于这个:
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 %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
提供商
醇>
注意:我不认为厨师中任何一个提供商的文档都是正确的... newlines are not supported in the crontab format,除非使用反斜杠\
进行转义。在上面的第二个修复测试中,生成的crontab无效,并且在未转义的命令之间有换行符。
答案 1 :(得分:0)
我刚从厨师那里遇到同样的错误:
“更新name_of_cron_entry的状态时出错,退出:1”
但在我的情况下,问题是条件表达式的月日值很差。如果newline-in-command不是您的问题,请确保其余的cron参数符合要求:
分钟:0-59
小时:0-23
日期:1-31
月:1-12或JAN-DEC
星期几:0-6或SUN-SAT
年:1970-2099
答案 2 :(得分:0)
此错误的另一个原因可能是您尝试添加到crontab的命令可能太长。
cron命令的最大长度为999个字符,请参阅here。
答案 3 :(得分:-1)
documentation表示当未明确指定用户时,chef会尝试修改root的cron。这显然是失败的。
可能的修复: 1.在食谱中指定用户 2.以root身份运行chef-apply(气馁)