Arhn - архитектура программирования

Установка пути для всякий раз в cron, чтобы он мог найти ruby

Мой рубин находится в /usr/local/bin. всякий раз не может его найти, и установка PATH в верхней части моего файла cron не работает либо, я думаю, потому что всякий раз, когда команда запускается внутри нового экземпляра bash.

# this does not work
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin

# Begin Whenever generated tasks for: foo
0 * * * * /bin/bash -l -c 'cd /srv/foo/releases/20110429110637 && script/rails runner -e production '\''ActiveRecord::SessionStore::Session.destroy_recent(15)'\'''

# End Whenever generated tasks for: foo

Как я могу узнать, где находится мой двоичный файл ruby? Создание символической ссылки из /usr/bin кажется мне запутанным, но я думаю, что это может быть единственный вариант.

Этот вопрос предлагает env :PATH, "..." в schedule.rb в качестве решение, но (а) я не могу найти документацию по этой функции нигде в документах (б) похоже, это не решило проблему спрашивающего (к сожалению, мне требуется нетривиальное время, чтобы просто попробовать это) . обновить на самом деле это внизу этой страницы, сейчас попробую.

подробнее

  1. Я не могу изменить команду cron, потому что она генерируется всякий раз, когда
  2. я проверил, что если я создам новую оболочку bash с bash -l, /usr/bin/env отлично найдет ruby
  3. Я только что попробовал точную команду в cron, начиная с /bin/bash, из командной строки этого пользователя, и это сработало.

так что это очень загадочно...

29.04.2011

  • вы говорите, что у вас есть рубин в /usr/local/bin, но вы не включаете его в свой PATH? добавление :/usr/local/bin должно работать (я проверил свой файл cron, и он точно такой же) 29.04.2011

Ответы:


1

Решение состоит в том, чтобы поместить это в schedule.rb:

env :PATH, ENV['PATH']

Вот небольшое руководство, которое я составил по этой теме.

04.05.2011
  • у вас есть другие входные данные? Я добавил это, и я получаю ту же ошибку в cron.log, и я уверен, что мой путь правильный. я даже могу запустить /usr/local/bin/ruby -v и получить правильный ответ 31.07.2012
  • Что ж, похоже, это больше не работает с более поздними версиями, которые у меня есть ?? 15.12.2012
  • Если вы хотите, вы можете обрезать это до env :PATH, ENV['PATH'], чтобы установить его автоматически, а не жестко запрограммировать. 04.06.2013
  • По какой-то причине этот метод у меня не сработал, поэтому я добавил все среды, а не только путь ENV.each { |k, v| env(k, v) } 25.01.2016

  • 2

    перепишите свой crontab как

    0 * * * * { PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/sbin ; export PATH ;/bin/bash -l -c 'cd /srv/foo/releases/20110429110637 && script/rails runner -e production '\''ActiveRecord::SessionStore::Session.destroy_recent(15)'\''' ; }
    

    Или вы должны попытаться выяснить, почему ваша оболочка BASH не выбирает PATH=..., который почти наверняка находится в вашем .profile или .bash_profile.

    Надеюсь, это поможет.

    29.04.2011
  • спасибо, добавил дополнительную информацию к моему вопросу на основе вашего ответа 29.04.2011

  • 3

    Как указал Джон Бахир, вы можете сделать это через env. Но позвольте мне добавить больше информации. Я развертываю на AWS Opsworks. К сожалению, у них по умолчанию не установлен ruby-менеджер (RVM, Rbenv и т. д.).

    Первое, что мне нужно было сделать, это подключиться к инстансу по SSH и выяснить, какой ruby ​​я использую. Это было достаточно просто, выполнив команду which ruby в терминале.

    $ which ruby
    /usr/local/bin/ruby
    

    Cron использовал ruby, расположенный по адресу /usr/bin/ruby. Это нужно было изменить.

    В schedule.rb у меня есть:

    set :env_path, ''
    env :PATH, @env_path if @env_path.present?
    

    В локальном режиме env_path устанавливать не нужно. Для большинства пользователей единственное, что нужно сделать, это выполнить всякий раз как таковой:

    bundle exec whenever --set 'environment=development' --update-crontab
    

    В промежуточной/производственной среде ruby ​​может быть установлен в другом месте. Поэтому запуск этого может быть более подходящим:

    bundle exec whenever --set 'environment=staging&env_path=/usr/bin/local' --update-crontab
    

    Вам нужно будет заменить /usr/bin/local на вывод echo $PATH.

    Однако в Opsworks мне нужно было создать собственный рецепт Chef, который выглядел так:

    node[:deploy].each do |application, deploy|
      execute 'whenever' do
        user 'deploy'
        group 'nginx'
        cwd "#{deploy[:deploy_to]}/current"
        command "bundle exec whenever --set 'environment=#{deploy[:environment_variables][:RAILS_ENV]}&env_path=#{ENV['PATH']}' --update-crontab"
      end
    end
    

    Я надеюсь, что информация здесь достаточно ясна.

    04.02.2014
    Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..