Spec-Zone.ru › Chef 16

Ресурс cron

Эта страница сгенерирована из исходного кода Chef. Чтобы предложить изменение, отредактируйте файл cron.rb и отправьте запрос на включение изменений в репозиторий Chef.

Страница справочника по ресурсам


Используйте ресурс cron для управления записями cron для планирования заданий по времени.

Предупреждение

Ресурс cron следует использовать только для изменения записи в файле crontab. Ресурс cron_d непосредственно управляет файлами cron.d. Этот ресурс поставляется в Chef 14.4 или более поздней версии, а также может быть найден в сборнике рецептов cron для предыдущих выпусков chef-client.

Синтаксис


Блок ресурсов cron управляет записями cron. Например, чтобы получать еженедельный отчет о сборнике рецептов из Chef Supermarket:

cron 'cookbooks_report' do
  action :create
  minute '0'
  hour '0'
  weekday '1'
  user 'chefio'
  mailto 'sysadmin@example.com'
  home '/srv/supermarket/shared/system'
  command %W{
    cd /srv/supermarket/current &&
    env RUBYLIB="/srv/supermarket/current/lib"
    RAILS_ASSET_ID=`git rev-parse HEAD` RAILS_ENV="#{rails_env}"
    bundle exec rake cookbooks_report
  }.join(' ')
end

Полный синтаксис для всех свойств, доступных ресурсу cron, следующий:

cron 'name' do
  command          String
  day              Integer, String # default value: "*"
  environment      Hash
  home             String
  hour             Integer, String # default value: "*"
  mailto           String
  minute           Integer, String # default value: "*"
  month            Integer, String # default value: "*"
  path             String
  shell            String
  time             Symbol
  time_out         Hash
  user             String # default value: "root"
  weekday          Integer, String, Symbol # default value: "*"
  action           Symbol # defaults to :create if not specified
end

где:

  • cron — это ресурс.
  • name — это имя, данное блоку ресурса.
  • action определяет, какие действия выполнит клиент Chef Infra для приведения узла в желаемое состояние.
  • command, day, environment, home, hour, mailto, minute, month, path, shell, time, time_out, user, и weekday — это свойства, доступные для этого ресурса.

Действия


Ресурс cron имеет следующие действия:

:create
По умолчанию. Создает запись в файле таблицы cron (crontab). Если запись уже существует (но не совпадает), обновите эту запись, чтобы она соответствовала.
:delete
Удаляет запись из файла таблицы cron (crontab).
:nothing
Этот блок ресурсов не выполняет никаких действий, если не получит уведомление от другого ресурса о необходимости выполнить действие. После получения уведомления этот блок ресурсов либо запускается немедленно, либо помещается в очередь для запуска в конце работы клиента Chef Infra.

Свойства


Ресурс cron имеет следующие свойства:

command
Тип Ruby: String | REQUIRED

Команда, которая должна быть выполнена, или путь к файлу, который содержит команду, которая должна быть выполнена.

day
Тип Ruby: Integer, String | Значение по умолчанию: *

День месяца, в который должна выполняться запись cron (1 - 31).

environment
Тип Ruby: Hash

Хэш, содержащий дополнительные произвольные переменные окружения, под которыми работа cron будет выполняться в формате ({'ENV_VARIABLE' => 'VALUE'}). Примечание: эти переменные должны существовать, чтобы команда успешно выполнилась.

home
Тип Ruby: String

Устанавливает переменную окружения HOME.

hour
Тип Ruby: Integer, String | Значение по умолчанию: *

Час, в который должна выполняться запись cron (0 - 23).

mailto
Тип Ruby: String

Устанавливает переменную окружения MAILTO.

minute
Тип Ruby: Integer, String | Значение по умолчанию: *

Минута, в которую должна выполняться запись cron (0 - 59).

month
Тип Ruby: Integer, String | Значение по умолчанию: *

Месяц года, в который должна выполняться запись cron (1 - 12, jan-dec, или *).

path
Тип Ruby: String

Устанавливает переменную окружения PATH.

shell
Тип Ruby: String

Устанавливает переменную окружения SHELL.

time
Тип Ruby: SymbolДопустимые значения: :annually, :daily, :hourly, :midnight, :monthly, :reboot, :weekly, :yearly

Временной интервал.

time_out
Тип Ruby: Hash

Хэш таймаутов в формате ({'OPTION' => 'VALUE'}). Допустимые параметры:

  • preserve-status (BOOL, по умолчанию: ‘false’),
  • foreground (BOOL, по умолчанию: ‘false’),
  • kill-after (в секундах),
  • signal (имя, например, ‘HUP’, или число)

Новое в Chef Infra Client 15.7

user
Тип Ruby: String | Значение по умолчанию: root

Имя пользователя, который запускает команду. Если свойство пользователя изменено, исходный пользователь для программы crontab продолжает работать, пока эта программа crontab не будет удалена. Это свойство не применимо на платформе AIX.

weekday
Тип Ruby: Integer, String, Symbol | Значение по умолчанию: *

День недели, в который должна выполняться эта запись (0-7, mon-sun, monday-sunday, или *), где воскресенье — это и 0, и 7.


Общие функции ресурса


Ресурсы Chef включают общие свойства, уведомления и средства защиты ресурсов.

Общие свойства

Следующие свойства являются общими для каждого ресурса:

compile_time

Тип Ruby: true, false | Значение по умолчанию: false

Управление фазой, во время которой ресурс запускается на узле. Установите значение true, чтобы запустить во время построения коллекции ресурсов (compile phase). Установите значение false, чтобы запустить, когда клиент Chef Infra настраивает узел (converge phase).

ignore_failure

Тип Ruby: true, false, :quiet | Значение по умолчанию: false

Продолжать выполнение рецепта, если ресурс завершится неудачей по какой-либо причине. :quiet не будет отображать полный стек трассировки, и рецепт будет продолжать выполняться, если ресурс завершится неудачей.

retries

Тип Ruby: Integer | Значение по умолчанию: 0

Количество попыток перехватить исключения и повторить попытку работы с ресурсом.

retry_delay

Тип Ruby: Integer | Значение по умолчанию: 2

Задержка повтора (в секундах).

sensitive

Тип Ruby: true, false | Значение по умолчанию: false

Убедитесь, что конфиденциальные данные ресурса не регистрируются Chef InfraClient.

Уведомления

notifies

Тип Ruby: Symbol, 'Chef::Resource[String]'

Ресурс может уведомить другой ресурс о необходимости выполнить действие, когда его состояние изменится. Укажите 'resource[name]', :action, которое должен выполнить этот ресурс, а затем :timer для этого действия. Ресурс может уведомить более одного ресурса; используйте оператор notifies для каждого ресурса, который должен быть уведомлен.

Если указанный ресурс не существует, возникает ошибка. В отличие от этого, subscribes не завершится ошибкой, если исходный ресурс не найден.

Таймер указывает момент во время выполнения клиента Chef Infra, когда выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие с уведомленным ресурсом должно быть выполнено до обработки блока ресурса, в котором находится уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь, а затем выполнено в конце работы клиента Chef Infra.

:immediate, :immediately

Указывает, что уведомление должно быть выполнено немедленно для каждого уведомленного ресурса.

Синтаксис для notifies следующий:

notifies :action, 'resource[name]', :timer
subscribes

Тип Ruby: Symbol, 'Chef::Resource[String]'

Ресурс может прослушивать другой ресурс, а затем выполнить действие, если состояние прослушиваемого ресурса изменится. Укажите 'resource[name]', :action, которое будет выполнено, а затем :timer для этого действия.

Обратите внимание, что subscribes не применяет указанное действие к ресурсу, который он прослушивает — например:

file '/etc/nginx/ssl/example.crt' do
  mode '0600'
  owner 'root'
end

service 'nginx' do
  subscribes :reload, 'file[/etc/nginx/ssl/example.crt]', :immediately
end

В этом случае свойство subscribes перезагружает службу nginx, когда обновляется ее файл сертификата, расположенный в /etc/nginx/ssl/example.crt. subscribes не вносит никаких изменений в сам файл сертификата, он просто прослушивает изменения файла и выполняет действие :reload для своего ресурса (в этом примере nginx) при обнаружении изменения.

Если другой ресурс не существует, подписка не вызовет ошибку. Сравните это с более строгими семантическими правилами notifies, которые вызовут ошибку, если другой ресурс не существует.

Таймер указывает момент во время выполнения клиента Chef Infra, когда выполняется уведомление. Доступны следующие таймеры:

:before

Указывает, что действие с уведомленным ресурсом должно быть выполнено до обработки блока ресурса, в котором находится уведомление.

:delayed

По умолчанию. Указывает, что уведомление должно быть помещено в очередь, а затем выполнено в конце работы клиента Chef Infra.

:immediate, :immediately

Указывает, что уведомление должно быть выполнено немедленно для каждого уведомленного ресурса.

Синтаксис для subscribes следующий:

subscribes :action, 'resource[name]', :timer

Средства защиты

Свойство-страж может использоваться для оценки состояния узла во время фазы выполнения выполнения Chef Infra Client. Основываясь на результатах этой оценки, свойство-страж затем используется для указания Chef Infra Client, следует ли ему продолжить выполнение ресурса. Свойство-страж принимает либо строковое значение, либо значение Ruby-блока:

  • Строка выполняется как команда оболочки. Если команда возвращает 0, страж применяется. Если команда возвращает любое другое значение, то свойство-страж не применяется. Строковые стражи в выполнении powershell_script выполняют команды Windows PowerShell и могут возвращать true в дополнение к 0.
  • Блок выполняется как код Ruby, который должен вернуть либо true, либо false. Если блок возвращает true, свойство-страж применяется. Если блок возвращает false, свойство-страж не применяется.

Свойство-страж полезно для обеспечения идемпотентности ресурса, позволяя этому ресурсу проверять желаемое состояние во время выполнения, а затем, если желаемое состояние присутствует, для Chef Infra Client ничего не делать.

Свойства

Следующие свойства могут быть использованы для определения стража, который оценивается во время фазы выполнения выполнения Chef Infra Client:

not_if

Запретить выполнение ресурса, когда условие возвращает true.

only_if

Разрешить выполнение ресурса только если условие возвращает true.

Примеры


В следующих примерах демонстрируются различные подходы к использованию ресурса cron в рецептах:

Запуск программы через указанный интервал

cron 'noop' do
  hour '5'
  minute '0'
  command '/bin/true'
end

Запуск записи, если папка существует

cron 'ganglia_tomcat_thread_max' do
  command "/usr/bin/gmetric
    -n 'tomcat threads max'
    -t uint32
    -v '/usr/local/bin/tomcat-stat
    --thread-max'"
  only_if { ::File.exist?('/home/jboss') }
end

Запуск каждую субботу в 8:00

Следующий пример демонстрирует расписание, которое будет запускаться каждый час в 8:00 каждое субботнее утро, а затем отправит электронное письмо на «admin@example.com» после каждого запуска.

cron 'name_of_cron_entry' do
  minute '0'
  hour '8'
  weekday '6'
  mailto 'admin@example.com'
  action :create
end

Запуск только в ноябре

Следующий пример демонстрирует расписание, которое будет запускаться в 20:00 каждый будний день (с понедельника по пятницу), но только в ноябре:

cron 'name_of_cron_entry' do
  minute '0'
  hour '20'
  day '*'
  month '11'
  weekday '1-5'
  action :create
end
Ресурс cron
  • Синтаксис
  • Действия
  • Свойства
  • Общие функциональные возможности ресурсов
    • Общие свойства
    • Уведомления
    • Стражи
  • Примеры

© Chef Software, Inc.
Licensed under the Creative Commons Attribution 3.0 Unported License.
The Chef™ Mark and Chef Logo are either registered trademarks/service marks or trademarks/servicemarks of Chef, in the United States and other countries and are used with Chef Inc's permission.
We are not affiliated with, endorsed or sponsored by Chef Inc.
https://docs.chef.io/resources/cron/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API