El script se ejecuta con éxito en la línea de comandos, pero no como un cronjob

Tengo una secuencia de comandos bash que ejecuta una secuencia de comandos ruby ​​que recupera mis feeds de twitter.

## /home/username/twittercron #!/bin/bash cd /home/username/twitter ruby twitter.rb friends 

Se ejecuta con éxito en la línea de comandos.

 /home/username/twittercron 

Pero cuando trato de ejecutarlo como un cronjob, se ejecutó pero no fue capaz de recuperar los feeds.

 ## crontab -e */15 * * * * * /home/username/twittercron 

El script ha sido chmod + x. No estoy seguro de por qué es como tal. ¿Algunas ideas?

Ruby Version Manager (rvm) estaba causando el problema. Tuve que llamar al guión en cron así.

 */15 * * * * bash -c 'source /home/username/.rvm/scripts/rvm && /usr/bin/env ruby /home/username/twitter/twitter.rb friends' 

Creo que eso se puede hacer simplemente forzando a bash a actuar como un shell de inicio de sesión, por lo que genera .bashrc, etc .:

 */15 * * * * * /bin/bash -l -c '/home/username/twittercron' 

Aquí hay un artículo sobre esto.

He tenido una buena experiencia al usar http://github.com/javan/whenever

Utiliza un DSL de Ruby para administrar las tareas cron y controla la configuración de toda la magia del entorno.

 every 3.hours do runner "MyModel.some_process" rake "my:rake:task" command "/usr/bin/my_great_command" end 

Debe proporcionar la ruta absoluta al comando de ejecución (o mediante env).

 */15 * * * * * /usr/bin/env sh /home/username/twittercron 

Alternativamente:

 */15 * * * * * /usr/bin/env ruby /home/username/twitter/twitter.rb friends 

Tienes una demasiada * s en tu crontab.

Revise su correo y vea si hay algún mensaje de error. Ponga algo de depuración en su script bash, por ejemplo, echo done>debug.log en la última línea y vea si se crea debug.log . elimine ## /home/username/twittercron en su script y ponga #!/bin/bash en la primera línea.

 */15 * * * * * /bin/bash /home/username/twittercron