#chef-infra #chef-recipe
#шеф-повар-ниже #шеф-повар-рецепт
Вопрос:
Я пытаюсь создать cron, который будет запускаться каждый день утром в 3: 15 утра по следующему рецепту :
if node.roles.include?('cloudera-manager')
cookbook_file '/usr/local/bin/cloudera-manager-db-backup.sh' do
owner 'root'
group 'root'
mode 0755
action :create
end
cron 'cloudera-manager-db-backup' do
action :create
minute '15'
hour '3'
user 'root'
command '/usr/local/bin/cloudera-manager-db-backup.sh'
end
cat cloudera-manager-db-backup.sh.erb
#!/bin/bash
# Executes a dump of the postgres database for cloudera manager, gzips the file, upload to s3 and remove file from local machine
<%if node.chef_environment == 'prod'-%>
NAME=$(hostname)
TIME=`date %Y-%m-%d_%H-%M-%S`
PGPASSWORD=$(head -1 /var/lib/cloudera-scm-server-db/data/generated_password.txt) pg_dump -p 7432 -U cloudera-scm scm > "/srv/${NAME}_${TIME}.psql"
gzip "/srv/${NAME}_${TIME}.psql"
s3cmd put "/srv/${NAME}_${TIME}.psql.gz" s3://psqlbackup/prod/
rm -rf /srv/${NAME}_${TIME}.psql.gz
<%elsif node.chef_environment == 'qa'-%>
NAME=$(hostname)
TIME=`date %Y-%m-%d_%H-%M-%S`
PGPASSWORD=$(head -1 /var/lib/cloudera-scm-server-db/data/generated_password.txt) pg_dump -p 7432 -U cloudera-scm scm > "/srv/${NAME}_${TIME}.psql"
gzip "/srv/${NAME}_${TIME}.psql"
s3cmd put "/srv/${NAME}_${TIME}.psql.gz" s3://psqlbackup/qa/
rm -rf /srv/${NAME}_${TIME}.psql.gz
<%elsif node.chef_environment == 'dev'-%>
NAME=$(hostname)
TIME=`date %Y-%m-%d_%H-%M-%S`
PGPASSWORD=$(head -1 /var/lib/cloudera-scm-server-db/data/generated_password.txt) pg_dump -p 7432 -U cloudera-scm scm > "/srv/${NAME}_${TIME}.psql"
gzip "/srv/${NAME}_${TIME}.psql"
s3cmd put "/srv/${NAME}_${TIME}.psql.gz" s3://psqlbackup/dev/
rm -rf /srv/${NAME}_${TIME}.psql.gz
<%end-%>
Проблема, с которой я сталкиваюсь, заключается в этом файле (/usr/local/bin/cloudera-manager-db-backup.sh ) создается во всех средах, но с этим :
<%if node.chef_environment == 'prod'-%>
NAME=$(hostname)
TIME=`date %Y-%m-%d_%H-%M-%S`
PGPASSWORD=$(head -1 /var/lib/cloudera-scm-server-db/data/generated_password.txt) pg_dump -p 7432 -U cloudera-scm scm > "/srv/${NAME}_${TIME}.psql"
gzip "/srv/${NAME}_${TIME}.psql"
s3cmd put "/srv/${NAME}_${TIME}.psql.gz" s3://psqlbackup/prod/
rm -rf /srv/${NAME}_${TIME}.psql.gz
Я хочу, чтобы в каждом env должен быть отдельный файл в соответствии с cloudera-manager-db-backup.sh.erb node.chef_environment
Вторая проблема заключается в том, что даже файл создается на всех компьютерах, но cron запускается только на одном компьютере, который также находится в неподходящее время, cron должен запускаться в 3: 15 утра каждый день, но он запускается в 00: 00 (полночь)
Кто-нибудь может мне помочь с этим
Комментарии:
1. Любая помощь в том, почему cron не работает в 3: 15 утра?
Ответ №1:
Вы используете cookbook_file
, но хотите template
. Файлы поваренной книги удаляются «как есть», но шаблоны отображаются с использованием ERB ( <%
things):
if node.roles.include?('cloudera-manager')
template '/usr/local/bin/cloudera-manager-db-backup.sh' do
owner 'root'
group 'root'
mode 0755
action :create
end
# existing code
cron '...'
end
А затем переместите файл из files/default/cloudera-manager-db-backup.sh
в templates/default/cloudera-manage-db-backup.sh.erb
.