2012-03-18 16 views
5

He escrito un script de Rake que debería ejecutarse automáticamente con Crontab. La secuencia de comandos funciona bien cuando se escribe en la línea de comandos, pero no se puede ejecutar correctamente dentro del cron.El script de My Shell que inicia Rake no se ejecuta correctamente cuando se inicia a través de cron

El guión se parece a esto:

#!/bin/sh 

echo `date` 
cd /home/mick/myapp/current 
rake RAILS_ENV=production mynamespace:myaction 

La configuración crontab se ve así:

10 0,6,12,18 * * * /home/mick/work/launch.sh >> /home/mick/work/launch.log 

Después de la ejecución, el archivo de registro solo contiene la fecha, pero nada más, y el error me sale en el registro del sistema se parece a esto:

Mar 18 18:10:01 CRON[21773]: (mick) CMD (/home/mick/work/launch.sh >> /home/mick/work/launch.log) 
Mar 18 18:10:01 CRON[21772]: (CRON) error (grandchild #21773 failed with exit status 127) 
Mar 18 18:10:01 postfix/sendmail[21776]: fatal: open /etc/postfix/main.cf: No such file or directory 
Mar 18 18:10:01 CRON[21772]: (mick) MAIL (mailed 1 byte of output; but got status 0x004b, #012) 

EDITAR:

Gracias al comentario de @Holger Just, he encontrado this link que me ayudó a obtener un script en funcionamiento.

Aquí está la versión actualizada de mi guión

#!/usr/bin/env bash # UPDATED TO GET ACCESS TO 'source' 

export PATH=blabla # NOT SURE THIS HELPED AS IT WAS MY FIRST MODIF AND DIDN'T FIX 
source /home/mick/.rvm/environments/default # LOADING RVM TO MAKE THINGS WORK 
echo `date` 
cd /home/mick/myapp/current 
rake RAILS_ENV=production mynamespace:myaction 
+0

Incluso todas las cosas del entorno agregadas al script aquí no corrigieron un problema similar al que tenía, pero lo hizo un simple/excesivo "origen ~/.bash_profile". – David

Respuesta

4

Cron típicamente tiene un muy limitado $PATH. Por lo tanto, puede establecer $PATH en la parte superior de su secuencia de comandos o usar rutas completas en todo. Puede establecer la ruta en su guión como

export PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin 

Por supuesto, es probable que tenga que adaptar su $PATH. p.ej. puede usar el shell de inicio de sesión de su usuario raíz. Puede obtenerlo ejecutando echo $PATH.

También tenga en cuenta que si utiliza RVM, debe cargarlo en su script cron explícitamente ya que cron no carga rvm (o cualquier otra secuencia de comandos de inicialización de shell) de forma predeterminada.

+0

gracias. Con su aporte (que me llevó a este enlace), lo hice funcionar, cf. pregunta editada –

Cuestiones relacionadas