ресурс crontab
Используйте crontab ресурс аудита Chef InSpec для проверки записей crontab для конкретного пользователя в системе. Он распознаёт специальные временные строки (@yearly, @weekly и т.д.).
Доступность
Установка
Этот ресурс распространяется вместе с самим Chef InSpec. Вы можете использовать его автоматически.
Версия
Этот ресурс стал доступен в версии v1.15.0 InSpec.
Синтаксис
Блок ресурса crontab объявляет пользователя (по умолчанию текущий пользователь) и детали для проверки, такие как элементы расписания для каждой записи crontab или сами команды:
describe crontab do
its('commands') { should include '/some/scheduled/task.sh' }
end
Примечание
include в этом контексте указывает весь список команд, которые должна включать запись crontab, а не конкретную подстроку, которая должна быть включена командой. Матчер include всегда сопоставляет полное вызов команды, включая параметры и аргументы. Путь к системному crontab также может быть задан через:
describe crontab(path: '/etc/cron.d/some_crontab') do
its('commands') { should include '/path/to/some/script' }
end
Обратите внимание, что в качестве аргументов ресурса следует указывать только путь или пользователя (а не оба).
Примеры
В следующих примерах показано, как использовать этот ресурс аудита Chef InSpec.
Проверка наличия определённой команды в crontab пользователя root
describe crontab('root') do
its('commands') { should include '/path/to/some/script -option arg' }
end
Проверка, что запись crontab пользователя myuser для команды ‘/home/myuser/build.sh’ выполняется каждую минуту
describe crontab('myuser').commands('/home/myuser/build.sh') do
its('hours') { should cmp '*' }
its('minutes') { should cmp '*' }
end
Проверка, что crontab текущего пользователя не содержит задач, запланированных на выполнение каждый час и каждую минуту
describe crontab.where({'hour' => '*', 'minute' => '*'}) do
its('entries.length') { should cmp '0' }
end
Проверка, что crontab текущего пользователя содержит одну команду, соответствующую шаблону
describe crontab.where { command =~ /a partial command string/ } do
its('entries.length') { should cmp 1 }
end
Проверка специальной временной строки (например, @yearly /root/annual_report.sh)
describe crontab.commands('/root/annual_report.sh') do
its('hours') { should cmp '0' }
its('minutes') { should cmp '0' }
its('days') { should cmp '1' }
its('months') { should cmp '1' }
end
Проверка случая @reboot
describe crontab.commands('/root/reboot.sh') do
its('hours') { should cmp '-1' }
its('minutes') { should cmp '-1' }
end
Примеры свойств
Проверка специальной временной строки
describe crontab do
its('minutes') { should cmp '0' }
its('hours') { should cmp '0' }
its('days') { should cmp '1' }
its('weekdays') { should cmp '1' }
its('user') { should include 'username'}
its('commands') { should include '/some/scheduled/task.sh' }
end
Chef InSpec автоматически интерпретирует поддерживаемые crontab специальные временные строки. Например, запись crontab, настроенная на выполнение @yearly может быть проверена так, как если бы запись была вручную настроена на выполнение 1 января в 00:00.
Матчеры
Полный список доступных матчеров можно найти на нашей странице матчеров.
© 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/inspec/resources/crontab/