2013-05-21 3 views
5

Я попытался простейший пример, приведенный http://docs.opscode.com/resource_cron.html#examplesповар не может создать хрон

cron "name_of_cron_entry" do 
     hour "8" 
     weekday "6" 
     mailto "[email protected]" 
     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 

Кто-нибудь встретил ту же проблему раньше? Любые решения?

ответ

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 

Как ни странно, работает ваш пример, кажется, работает для меня, и создает пустую запись кронтаб для корня:

[email protected]:~# crontab -l 
# Chef Name: name_of_cron_entry 
[email protected] 
* 8 * * 6 

Это говорит о том, чтобы мне что вы используете другую версию шеф-повара gem & cron provider.

Таким образом, в зависимости от версии шеф-самоцвет, который вы используете, это может быть this bug

Для справки, пример того, что не работает для меня было основано на этом:

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 

команда, которую я бегала был:

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_d от cron cookbook

Примечание: Я не думаю, что в документации либо поставщик в повара правильно, однако ... newlines are not supported in the crontab format если они сбрасываются с обратной косой чертой \. В моем тестировании со вторым исправлением выше результирующий crontab недействителен и имел новые строки между командами, которые не были экранированы.

+0

Этот рецепт пытается изменить cron для пользователя с именем «opscode», который, я считаю, отсутствует в вашей среде. – akiva

+0

@akiva: Я скопировал пример из [документации шеф-повара] (https://docs.chef.io /resource_cron.html), 'user 'opscode" - это то, что они установили в качестве примера. Они с тех пор изменили этот пример на «user» getchef «... ... Когда я его протестировал, я, очевидно, изменил его, чтобы он соответствовал пользователю, который существовал для моего варианта использования. – TrinitronX

0

Я просто побежал в одной и той же ошибки от шеф-повара:

«Ошибка обновления состояния name_of_cron_entry, выход: 1»

Но в моем случае, вопрос был плохим значением день-месяц из условного выражения.Если символ новой строки в командовании не ваш вопрос, убедитесь, что остальная часть вашего хрон параметры соответствуют требованиям:

  • минут: 0-59

  • часов: 0-23

  • день-месяц: 1-31

  • месяц: 1-12 или JAN-DEC

  • день-неделю: 0-6 или ВС-SAT

  • Год выпуск: 1970-2099

0

documentation в состоянии, когда явно не указан пользователь повар пытается изменить хроны в суперпользователе. это, очевидно, терпит неудачу.

Возможные исправления: 1. указать пользователя в рецепте 2. запустить повар применить в качестве корня (обескуражен)

+0

'chef-apply' выходит из сферы действия здесь, предполагается, что он будет использоваться для тестовых/однократных изменений на рабочей станции, а не для управления. И шеф-клиент должен быть запущен как root, поэтому его абсолютно не обескураживают. (И FWIW, по умолчанию это root, потому что шеф-повар должен быть запущен как root). (Поздний комментарий извините, но, хотя стоит это сказать) – Tensibai

0

Другой причиной этой ошибки может быть то, что команда, которую вы пытаетесь добавить к crontab может быть слишком длинным.

Максимальная длина для команды cron - 999 символов, см. here.

Смежные вопросы