Cron + whenever not working with RVM

2019-04-12 14:20发布

问题:

I am using RVM environment. RUby version : 2.1.2 rails : 4.1.1

schedule.rb : 

    every 1.minute do 
    runner "note.send_mail" 
    end 

I used whenever --update-crontab to update the cron tab.

when I check the jobs using crontab -l it shows up as below with no proper time set up. and the cron job does not work.

 * * * * * /bin/bash -l -c 'cd /Desktop/folder1/blog2 && bin/rails runner -e production '\''note.send_mail'\''' 

Can some one help me out fix this. Thanks!

回答1:

Go to your ~/.rvmrc file and add the following:

rvm_trust_rvmrcs_flag=1

Then whenever --update-crontab again. According to the README of whenever:

If your production environment uses RVM (Ruby Version Manager) you will run into a gotcha that causes your cron jobs to hang. This is not directly related to Whenever, and can be tricky to debug. Your .rvmrc files must be trusted or else the cron jobs will hang waiting for the file to be trusted. A solution is to disable the prompt by adding this line to your user rvm file in ~/.rvmrc

rvm_trust_rvmrcs_flag=1

This tells rvm to trust all rvmrc files.

If that doesn't work for you, try other solutions mentioned in this page: RVM-Notes.



回答2:

You could define a custom runner that loads rvm on the command line, like

job_type :runner_with_rvm, 'source /etc/profile.d/rvm.sh; cd :path;rvm 2.0@gemset do bundle exec script/rails runner -e :environment ':task' :output'

every 1.minute do
  runner_with_rvm "Note.send_email"
end

Replace 2.0@gemset with your desired ruby version and gemset.

Could be that /etc/profile.d/rvm.sh is something else in your environment too.