У меня проблемы с выполнением скрипта / бегуна с 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 Надеюсь, у меня сработало форматирование кода.
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 ...
.
Вам не нужно писать второй запускающий 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'
Вы можете использовать обертки rvm:
/home/deploy/.rvm/wrappers/ruby-2.2.4/ruby
Источник: https://rvm.io/deployment/cron#direct
Похожие вопросы
Связанные вопросы
Новые вопросы
ruby-on-rails
Ruby on Rails - это полнофункциональная платформа веб-приложений с открытым исходным кодом, написанная на Ruby. Он следует популярной модели фреймворка MVC и известен своим подходом «соглашение поверх конфигурации» при разработке приложений.