cron - Chef 无法创建 cron

标签 cron chef-infra

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

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

最佳答案

我偶然发现了同样的问题,发现我使用的示例中有换行符。问题是 cron 提供程序运行 crontab -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 版本,它可能是 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来自 cron cookbook 的提供商

  • 注:但是,我认为厨师中任一提供者的文档都不正确... newlines are not supported in the crontab format除非它们用反斜杠转义 \ .在我对上述第二个修复程序的测试中,生成的 crontab 无效,并且在未转义的命令之间有换行符。

    关于cron - Chef 无法创建 cron,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16662065/

    相关文章:

    Ubuntu 上的 Python Cron 作业

    php - 检查 php 文件命令是否已经在 cron 上运行

    ubuntu - 如何使用 Chef 在 crontab 中设置环境变量?

    nginx - Chef::Exceptions::ChecksumMismatch 从源代码安装 nginx-1.7.8 时

    unix - 无法让 cron 在 Amazon EC2 上运行?

    django - 如何在 Django 中为 celery beat 设置不同的工作日/周末时间表?

    mysql - 根据日期名称每天备份mysql数据库

    node.js - 如何处理在单个服务器上运行的多个应用程序?

    centos - 启动 Ejabberd 作为服务

    python - 使用 Chef 时“pip install -rrequirements.txt”失败