вкладка chef cron не работает

#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 .