2011-03-09 10 views
8

Tengo la instalación de ruby ​​por rvm (todo el sistema), y funcionó correctamente a través de la consola normal y mi programa de rieles se comporta correctamente con rails runner y apache2+passenger.¿por qué #!/Usr/bin/env ruby ​​no funciona en crontab?

Ahora, en un crontab, llamé rails runner foo.bar, se da por vencido, examinar cuidadosamente el registro veo que:

/usr/bin/env: ruby: No such file or directory 

Cualquier persona sabe por qué/usr/bin/env no funciona en el crontab?

Respuesta

7

Si ha instalado el rubí a través de RVM, rubí, probablemente, no se encuentra en/usr/bin. Dependiendo de dónde esté instalado RVM:

bash -c "source /usr/local/lib/rvm" && rails runner foo.bar 

Probablemente añade una fuente */RVM a su bashrc que es el guión RVM carga correcta.

+0

Descubrí la razón por la cual: el ruby ​​no está registrado en el shell crontab. E hice lo siguiente:/bin/bash -c "source/usr/local/rvm/src/rvm/scripts/rvm &&/root/a/a_rails/script/rails runner Foo.bar" – c2h2

4

su cron no hereda su entorno. intente hacer eco de "$ PATH" en un archivo para ver en qué está configurado.

También puedes, simplemente hacer "PATH =/usr/bin/ruby ​​& & foo.rb"

+1

¿Estaba destinado a ser '/ usr/bin/ruby ​​foo.rb'? Establecer '$ PATH' para un nombre de archivo en lugar de una lista de directorios no va a funcionar muy bien. – geekosaur

+0

necesitas RUTA, GEM_PATH y todas las demás cosas ... – c2h2

0

Tuve un problema similar. Cron parece ejecutar comandos de forma predeterminada sin usar la configuración PATH que esperaría del usuario (al iniciar sesión como ese usuario). De hecho, ni siquiera parecía utilizar ninguna de las configuraciones PATH predeterminadas (ya sea en/etc/profile o en otro lugar).

que fue capaz de encontrar el problema mediante los siguientes comandos (el primero es cómo parece cron para ejecutar comandos):

su -c 'PATH printenv' usuarioX

Con salida :/usr/local/bin:/usr/bin:/bin:/usr/juegos

su -l usuarioX -c 'printenv PATH'

Con salida: /opt/ruby-enterprise-1.8.7-2010.02/bin/:/opt/ruby-enterprise-1.8.7-2010.02/bin/:/usr/local/bin:/usr/bin:/bin:/usr/games

Parece que el primer comando no llena la variable PATH de ninguna forma, excepto por el valor predeterminado del sistema desnudo. En mi caso, lo resolví simplemente agregando la ruta (REE) necesaria a /etc/login.defs, que por defecto se ve así:

/etc/login.defs:103:ENV_PATH PATH =/usr/local/bin:/usr/bin:/bin:/usr/games

+0

necesitas dar todos los ruby env, si usa rvm, necesita exportar toda la información de GEM, GEM_HOME y PATH – c2h2

Cuestiones relacionadas