Не могу получить рельсовое задание, чтобы играть хорошо с crontab - PullRequest
2 голосов
/ 24 декабря 2011

У меня сейчас есть этот скрипт ...

nightly.sh

#!/bin/bash
rvm 1.9.2
cd /home/appname/capistrano/current
RAILS_ENV=production bundle exec rake nightly >> /home/appname/capistrano/shared/log/nightly.log 2>&1

Я использую это в моей записи в crontab здесь ... crontab -e

42 20 * * * /home/appname/nightly.sh

Когда он запускается, я получаю эту ошибку

/home/appname/nightly.sh: line 4: bundle: command not found

Я использую RVM

Я добавил некоторые переменные окружения в мой crontab для @ KL-7

SHELL=/bin/bash
HOME=/home/appname
PATH=/home/appname/local/bin:/home/appname/.rvm/gems/ruby-1.9.2-p290/bin:/home/appname/.rvm/gems/ruby-1.9.2-p290@global/bin:/home/appname/.rvm/rubies/ruby-1.9.2-p290/bin:/home/appname/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Теперь я получаю это ...

/home/appname/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:247:in `to_specs': Could not find bundler
[minitest-1.6.0, rake-0.8.7, rdoc-2.5.8] (Gem::LoadError)
        from /home/appname/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/dependency.rb:256:in `to_spec'
        from /home/appname/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems.rb:1210:in `gem'
        from /home/appname/.rvm/gems/ruby-1.9.2-p290/bin/bundle:18:in `<main>'

Ответы [ 4 ]

3 голосов
/ 24 декабря 2011

Это может быть потому, что выдает ошибку, а вы ее не захватываете. Попробуйте следующее:

01 04 * * * /bin/bash -l -c 'cd /home/appname/capistrano/current && RAILS_ENV=production bundle exec rake nightly' >> /home/appname/capistrano/shared/log/nightly.log 2>&1
2 голосов
/ 08 июня 2012

Это может помочь: / bin / bash -l -c

Чтение: http://blog.scoutapp.com/articles/2010/09/07/rvm-and-cron-in-production

2 голосов
/ 24 декабря 2011

Похоже, cron не может найти ваш bundle исполняемый файл. Вам нужно найти его (используя, например, which bundle), а затем либо указать полный путь к нему в crontab, либо установить переменную окружения PATH в верхней части crontab следующим образом:

PATH=/bin:/usr/bin:/path/to/directory/with/bundle/
0 голосов
/ 30 января 2014

Вот еще одно решение:

* * * * * ssh localhost 'your command here...'

Это просто подключит ssh к тому же хосту (который является источником нормальной среды) и выдаст команду

...