Ресурс 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
© 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/