Falha na tarefa de rake quando executada no cron

1

Estou usando o backup_fu para fazer backup do meu banco de dados. No crontab, você tem este comando:

* * * * * cd /var/www/amplify/current && RAILS_ENV=production /usr/bin/env rake backup

Sim, eu sei que um backup de um minuto é intenso, mas estou apenas fazendo isso para testar. Eu vou mudar o intervalo assim que eu começar a trabalhar.

  • No entanto, executá-lo no cron não faz backup. Quando verifico minha conta do Amazon S3, não vejo um arquivo .tar.gz.
  • Quando eu executo o SSH e colo o comando exatamente, ele faz o backup e vejo o .tar.gz no Amazon S3.

Nota:

  • Estou usando o RVM. No entanto, conforme mostrado em este tópico , se eu fizer o cd no diretório, a seleção de rubi apropriada será exibida .
  • Estou no CentOS: Linux version 2.6.18-194.8.1.el5.028stab070.5 (root@rhel5-build-x64) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-46)) #1 SMP Fri Sep 17 19:10:36 MSD 2010
  • Eu verifiquei /var/log/cron e parece que é executado: Feb 27 00:20:01 amplify crond[1667]: (ramon) CMD (cd /var/www/amplify/current && RAILS_ENV=production /usr/bin/env /usr/bin/rake backup)

Qualquer ajuda é apreciada, obrigado!

    
por Ramon Tayag 27.02.2011 / 08:52

5 respostas

2

Parece que isso acabou se tornando um problema de RVM, e não de servidor. Peço desculpas. Obrigado por suas respostas; eles me ajudaram a descobrir isso.

O final que funcionou foi:

cd /var/www/amplify/current && source /home/ramon/.rvm/environments/ree-1.8.7-2010.02@rails3 && RAILS_ENV=production /home/ramon/.rvm/gems/ree-1.8.7-2010.02@rails3/bin/rake backup &>/home/ramon/backup.log

A chave era usar source /home/ramon/.rvm/environments/ree-1.8.7-2010.02@rails3 .

Quando perguntei a Wayne Seguin sobre o cd'ing no diretório e o autoloading .rvmrc, ele disse que só funcionaria se:

  • O RVM é carregado corretamente como uma função (digite rvm | head -1)
  • O .rvmrc foi confiado anteriormente

Parece que no cron, o RVM não é carregado adequadamente como uma função, já que eu "confiei" no .rvmrc antes.

    
por 01.03.2011 / 16:51
1

Você verificou o e-mail da conta que está executando o cron job, a saída do comando deve aparecer lá e pode conter pistas sobre o problema.

Capture a saída do comando para um arquivo e adicione &>/path/to/logfile ao final do comando para descobrir o que está acontecendo.

    
por 27.02.2011 / 09:32
1

Isto:

/usr/bin/env rake backup

depende do PATH que contém a localização de rake . É o mesmo que simplesmente ter

rake backup

O ambiente para cron é diferente daquele para sua sessão interativa. Altere a linha no seu crontab para apontar diretamente para o executável rake :

* * * * * cd /var/www/amplify/current && RAILS_ENV=production /path/to/rake backup

ou defina o PATH do seu crontab (dentro do crontab) para incluí-lo:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/path/to/where/rake/is
    
por 27.02.2011 / 10:42
1

Configurar PATH no seu crontab não é muito portátil Eu sugiro que você faça algo assim:

~ $ rvm env --path                                                                                                                                  
/Users/james/.rvm/environments/ruby-1.9.3-p392

O que nesse arquivo:

~ $ cat 'rvm env --path'                                                                                                                            
export PATH ; PATH="/Users/james/.rvm/gems/ruby-1.9...

Então, podemos fazer isso:

~ $ crontab -e
0 * * * * source /Users/james/.rvm/environments/ruby-1.9.3-p392 && command
# or 
0 * * * * rvm use 1.9.3@myenv && source 'rvm env --path' && command
    
por 18.07.2013 / 02:40
0

Coloque seu cronjob em um script separado e chame-o no crontab.

cd /var/www/amplify/current && RAILS_ENV=production /usr/bin/env rake backup
    
por 27.02.2011 / 10:13

Tags