5

我尝试了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

我使用knife ssh 使菜谱在厨师客户端上运行,客户端给出错误:

Error executing action create on resource cron[name_of_cron_entry]
Error updating state of name_of_cron_entry, exit: 1

有没有人遇到过同样的问题?有什么解决办法吗?

4

4 回答 4

11

我偶然发现了同样的问题,发现我使用的示例中有换行符。问题是 cron 提供程序运行并将STDINcrontab -u user -管道传输到进程。无论出于何种原因,它似乎都不能很好地接受换行符。

/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

这向我表明您正在使用不同版本的 chef gem & cron 提供程序。

因此,根据您使用的 chef gem 版本,可能是这个错误

作为参考,对我不起作用的示例基于以下示例:

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 个修复对我有用:

  1. 利用command 'cd /path/to/src/my-project && bundle exec my_script.rb'
  2. cron 食谱cron从提供者更改为提供者cron_d

注意:我不认为 chef 中任何一个提供者的文档都是正确的...... crontab 格式不支持换行符,除非它们用反斜杠转义\。在我对上面第二个修复的测试中,生成的 crontab 无效,并且在未转义的命令之间有换行符。

于 2013-05-21T23:38:19.770 回答
0

我刚刚遇到了厨师的同样错误:

“更新 name_of_cron_entry 状态时出错,退出:1”

但就我而言,问题是条件表达式中的错误日期值。如果换行符不是您的问题,请确保其余的 cron 参数符合要求:

  • 分钟:0-59

  • 小时:0-23

  • 日期:1-31

  • 月份:1-12 或 JAN-DEC

  • 星期几:0-6 或 SUN-SAT

  • 年份:1970-2099

于 2014-11-11T22:46:03.320 回答
0

此错误的另一个原因可能是您尝试添加到 crontab 的命令可能太长。

cron 命令的最大长度为 999 个字符,请参见此处

于 2017-06-02T07:58:43.520 回答
-1

文档指出,当未明确指定用户时,厨师会尝试修改根的 cron。这显然失败了。

可能的修复:1. 在你的食谱中指定一个用户 2. 以 root 身份运行 chef-apply(不鼓励)

于 2015-03-24T11:50:25.267 回答