厨师无法创建cron

时间:2013-05-21 04:16:57

标签: cron chef

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

以前有人遇到过同样的问题吗?任何解决方案?

4 个答案:

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

  1. 使用command 'cd /path/to/src/my-project && bundle exec my_script.rb'
  2. cron cookbook
  3. 更改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(气馁)