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

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

Я прочитал эту ветку Необходимо настроить 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 Надеюсь, у меня сработало форматирование кода.

2
that_guy 28 Авг 2011 в 10:28

3 ответа

Лучший ответ

Не могли бы вы попробовать поместить код, который хотите запустить, в отдельный скрипт, а затем использовать 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 ....

5
nathanvda 28 Авг 2011 в 07:44

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

Строка shebang в вашем скрипте должна относиться не напрямую к исполняемому файлу ruby, а к ruby ​​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'

Полная запись в блоге по теме

4
Daniel Szmulewicz 3 Май 2013 в 00:33

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

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

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

0
Abel 17 Сен 2016 в 19:37