RVM не устанавливает среду с помощью cron - PullRequest
2 голосов
/ 28 августа 2011

Я с трудом выполняю скрипт / бегун с cron и RVM. Я полагаю, что проблемы заключаются в том, что среда rvm не установлена ​​до запуска бегуна.

сейчас я выкидываю ошибку / bin / sh: 1.sql: команда не найдена что больше, чем я получил раньше, так что я думаю, это хорошо.

Я читал эту ветку Необходимо настроить среду rvm перед каждым заданием cron , но я до сих пор не получил его. Я думаю, что частью проблемы является сообщение об ошибке.

пока это мой бегун.

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

по приведенной выше ссылке, я попытался сделать rvm_cron_runner.

Я создал файл и поместил его в него:

#!/bin/sh
source "/Users/dude/.rvm/scripts/rvm"
exec $1

Затем я обновил свой crontab к этому.

*/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"'

Это также не имело никакого значения. я не получаю ошибки. нет ничего.

Кто-нибудь может увидеть, что я делаю неправильно?

P.S. Я надеюсь, что мое форматирование кода сработало.

Ответы [ 3 ]

5 голосов
/ 28 августа 2011

Не могли бы вы попытаться поместить код, который вы хотите запустить, в отдельный скрипт, а затем использовать rvm_cron_runner?

Поэтому поместите ваши действия в файл с именем /path/cron_job

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

и затем в вашем crontab напишите

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

Различия:

  • это не запускает отдельную оболочку
  • использовать параметр rvm_cron_runner

Если бы вы использовали файл .rvmrc, вы могли бы даже удалить строку rvm use ..., я думаю.

4 голосов
/ 17 октября 2011

Вам не нужно писать второго бегуна cron (следуя этой логике, вы могли бы также написать третьего бегуна cron). Пожалуйста, будьте проще. Все, что вам нужно сделать, это настроить вашу задачу cron для запуска оболочки bash и заставить эту оболочку bash загружать вашу среду.

Строка shebang в вашем скрипте должна относиться не напрямую к исполняемому файлу ruby, а к ruv rvm:

#!/usr/bin/env ruby

Это указывает сценарию загружать среду и запускать ruby, как в командной строке с загруженным rvm.

Во многих системах, производных от UNIX, crontabs может иметь раздел конфигурации перед фактическими строками, которые определяют задания, которые должны быть запущены. Если это так, вы должны указать:

SHELL=/path/to/bash  

Это гарантирует, что задание cron будет порождено из bash. Тем не менее, ваша среда отсутствует, поэтому, чтобы дать команду bash загрузить вашу среду, вам нужно добавить в раздел конфигурации следующее:

BASH_ENV=/path/to/environment (typically .bash_profile or .bashrc) 

HOME автоматически выводится из строки / etc / passwd владельца crontab, но вы можете переопределить ее.

HOME=/path/to/home

После этого задание cron может выглядеть так:

15 14 1 * *     $HOME/rvm_script.rb

Что если ваш crontab не поддерживает раздел конфигурации. Что ж, вам придется указывать все директивы по окружающей среде в одной строке вместе с самой работой. Например,

15 14 1 * * export BASH_ENV=/path/to/environment && /full/path/to/bash -c '/full/path/to/rvm_script.rb'

Полный блог на эту тему

0 голосов
/ 17 сентября 2016

Вы можете использовать оболочки rvm:

/home/deploy/.rvm/wrappers/ruby-2.2.4/ruby

Источник: https://rvm.io/deployment/cron#direct

...