Cargue el shell de inicio de sesión dentro del cronjob del usuario

Cargue el shell de inicio de sesión dentro del cronjob del usuario

Estoy intentando ejecutar una tarea de rake mediante un cronjob programado. Mi crontab se parece a esto:

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

Ruby en mi cuenta lo proporciona RVM, que se carga mediante ~/.bashrc(antes de la verificación de no interacción):

# 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

Una y otra vez, esta tarea no se ejecuta porque RVM no se carga cuando se llama a la tarea ( /usr/bin/rubyen su lugar usa el sistema) y faltan dependencias de gemas.

¿Cómo puedo hacer que crontab cargue mi entorno de shell antes de ejecutar mis trabajos programados? gracias.

Respuesta1

¿No funcionaría simplemente obtener su ~/.bashrc en el cronjob?

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

Respuesta2

No se recomienda el uso del shell de inicio de sesión en procesos en segundo plano.

puedes usar este método:

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

también hay rvm croncomando:

rvm help cron

Respuesta3

Después de investigar un poco tras la respuesta de @mpapis, parece que hay una página en el sitio de RVM queexplica cómo utilizar una instalación RVM específica en un script ejecutado por cron.

Básicamente, descubres qué RVM te gustaría usar ejecutando esto (usando Ruby 1.9.3 aquí):

$ rvm env --path -- 1.9.3-p125

Sustituya su versión Ruby específica. Esto apuntará al archivo que necesita editarse sourcepara que se cargue el entorno Ruby deseado.

Escriba el script que ejecutará su trabajo cron:

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

Asegúrate de hacer el archivo ejecutable:

chmod u+x myjob.sh

crontab

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



¡BAM! Hecho.

información relacionada