Carrega o shell de login dentro do cronjob do usuário

0

Estou tentando executar uma tarefa rake usando um cronjob planejado. Meu crontab é parecido com isto:

0 1 * * 1-7 /bin/bash -l -c "cd ~/jobs/rake && rake reports:create >> ~/jobs/logs/cron.log"  

O Ruby na minha conta é fornecido pelo RVM, que é carregado via ~/.bashrc (antes da verificação sem interação):

# load RVM env
[[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

# ... rest of logic

De vez em quando, essa tarefa falha ao ser executada, pois o RVM não é carregado quando a tarefa é chamada (usa /usr/bin/ruby do sistema) e as dependências gem estão ausentes.

Como posso fazer crontab carregar meu ambiente de shell antes de executar meus trabalhos agendados? obrigado.

    
por sa125 20.08.2012 / 08:49

3 respostas

1

Depois de uma pequena escavação após a resposta do @mpapis, parece que há uma página no site do RVM que elabora como usar um RVM específico instalar em um script executado pelo cron .

Basicamente você descobre qual RVM você gostaria de usar executando isto (usando ruby 1.9.3 aqui):

$ rvm env --path -- 1.9.3-p125

Substitua sua versão em ruby específica. Isso apontará para o arquivo que precisa ser source ed para que o ambiente ruby desejado seja carregado.

Escreva o script a ser executado pelo seu cron job:

myjob.sh

#!/bin/bash

# the full path to the RVM env you got from running 'rvm env ...'
source ~/.rvm/environments/ruby-1.9.3-p125

# do stuff ...
cd ~/jobs/rake
rake reports:create

Certifique-se de tornar o arquivo executável:

chmod u+x myjob.sh

crontab

0 1 * * 1-7 bash -c "cd ~/jobs && ./myjob.sh"



BAM! Feito.

    
por 05.09.2012 / 09:32
2

usando shell de login não é recomendado em processos em segundo plano.

você pode usar este método:

0 1 * * 1-7 ~/.rvm/bin/rvm in ~/jobs/rake do rake reports:create >> ~/jobs/logs/cron.log"

também há o comando rvm cron :

rvm help cron
    
por 03.09.2012 / 10:36
1

Não iria simplesmente fornecer o seu ~ / .bashrc no trabalho do cronjob?

0 1 * * 1-7 /bin/bash -l -c "source ~/.bashrc; cd ~/jobs/rake && rake reports:create >> ~/jobs/logs/cron.log"  
    
por 20.08.2012 / 14:55