Cron + всякий раз, когда не работает с RVM

Я использую среду RVM. Версия RU: 2.1.2 рельсы: 4.1.1

schedule.rb : 

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

Я использовал whenever --update-crontab для обновления вкладки cron.

когда я проверяю задания с помощью crontab -l, оно отображается, как показано ниже, без правильного времени. и задание cron не работает.

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

Может ли кто-нибудь помочь мне исправить это. Спасибо!


person user2569524    schedule 07.06.2014    source источник
comment
Формат времени crontab - minutes hours day_of_month month day_of_week, поэтому каждая 1 минута действительно должна приводить к * * * * *, как это было для вас. Каждые 2 минуты будут равны */2 * * * *, а каждые 1 час будут равны 0 * * * * (в любое время, когда минуты равны 0). Каждые 6 часов будет 0 */6 * * *   -  person Kimmo Lehto    schedule 07.06.2014
comment
бегун, вероятно, не работает, я думаю, вместо этого должно быть runner "Note.send_mail" или что-то в этом роде.   -  person Kimmo Lehto    schedule 07.06.2014


Ответы (2)


Перейдите в свой файл ~/.rvmrc и добавьте следующее:

rvm_trust_rvmrcs_flag=1

Затем снова whenever --update-crontab. Согласно README всякий раз:

Если ваша производственная среда использует RVM (Ruby Version Manager), вы столкнетесь с ошибкой, из-за которой ваши задания cron зависают. Это не имеет прямого отношения к Whenever и может быть сложным для отладки. Ваши файлы .rvmrc должны быть доверенными, иначе задания cron будут зависать в ожидании того, что файлу будет доверять. Решение состоит в том, чтобы отключить подсказку, добавив эту строку в ваш пользовательский файл rvm в ~/.rvmrc

rvm_trust_rvmrcs_flag=1

Это говорит rvm доверять всем файлам rvmrc.

Если это не работает для вас, попробуйте другие решения, упомянутые на этой странице: RVM-Notes .

person Tamer Shlash    schedule 07.06.2014
comment
Я нигде не вижу файл .rvmrc... где он обычно. Все, что я вижу, это файл etc/rvmrc. Я добавил туда эту запись. Но так же не работает - person user2569524; 07.06.2014
comment
@user2569524 user2569524 Если вы используете дистрибутив Linux, файл .rvmrc должен находиться в домашней папке вашего пользователя. Если такого файла нет, создайте его. Однако убедитесь, что он не существует, так как файлы, имена которых начинаются с точки (.), скрыты в Linux. - person Tamer Shlash; 07.06.2014
comment
как этот файл изменит тот факт, что задание cron не загружает среду rvm? - person Sofia Bravo; 13.11.2015
comment
Для меня не было файла .rvmrc, но его было достаточно легко создать, и после этого он отлично работал. - person maurice; 27.12.2016

Вы можете определить собственный бегун, который загружает rvm в командной строке, например

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

Замените 2.0@gemset желаемой рубиновой версией и набором драгоценных камней.

Возможно, /etc/profile.d/rvm.sh — это что-то еще в вашей среде.

person Kimmo Lehto    schedule 07.06.2014
comment
кажется, есть синтаксическая ошибка в определении runner_with_rvm: /home/user/.rvm/gems/ruby-2.2.2@big/gems/whenever-0.9.4/lib/whenever/job_list.rb:25:in `instance_eval': config/schedule.rb:1: syntax error, unexpected tSTRING_BEG, expecting keyword_do or '{' or '(' (SyntaxError) ... runner -e :environment ':task' :output' ... - person Sofia Bravo; 13.11.2015
comment
Проблема в том, что он не избегает кавычек вокруг «задачи», меняя ее на \':задача\' - person Joshua Tyree; 15.06.2021