that_guy that_guy - 1 month ago 5x
Ruby Question

RVM isnt setting environment with cron

I'm having a rough time executing script/runner with a cron and RVM. I believe the issues lie with the rvm environment not being set before the runner is executed.

currently im throwing the error
/bin/sh: 1.sql: command not found
which is more than i've gotten earlier, so i guess that's good.

I've read this thread Need to set up rvm environment prior to every cron job but im still not really getting it. Part of the problem i think is the error reporting.

this is my runner thus far.

*/1 * * * * * /bin/bash -l -c 'rvm use 1.8.7-p352@2310; cd development/app/my_app2310 && script/runner -e development "Mailer.find_customer"'

as per the above link, i tried making a rvm_cron_runner.

i created a file and placed this in it:

source "/Users/dude/.rvm/scripts/rvm"
exec $1

then i updated my crontab to this.

*/1 * * * * * /bin/bash -l -c '/Users/dude/development/app/my_app2310/rvm_cron_runner; rvm use 1.8.7-p352@2310; cd development/app/my_app2310 && script/runner -e development "Mailer.find_customer"'

This also has made no difference. i get no error. nothing.

Can anyone see what i'm doing incorrectly?

P.S i hope my code formatting worked.


Could you try to place the code you want to run in a separate script, and then use the rvm_cron_runner ?

So place your actions in a file called /path/cron_job

rvm use 1.8.7-p352@2310
cd development/app/my_app2310 && script/runner -e development "Mailer.find_customer"

and then in your crontab write

1 2 * * * /path/rvm_cron_runner /path/cron_job

The differences:

  • this does not start a separate shell
  • use the parameter of the rvm_cron_runner

If you would use an .rvmrc file, you could even drop the rvm use ... line, I think.