LinuxForum.Fans
Тема

Как правильно указать PATH для пользователя

Автор: manik207 8 сообщений 590 просмотров
13.10.2017 13:02 #425882

Стенд: Centos7 с последними обновлениями, Redmine 3.1.7 (располагается в директории /opt/redmine), ruby 2.3.0 (установлен через rvm), bundler 1.13.5.
Изначально ставила всё от root, настраивала создание задач из писем из командной строки так:

text
rake -f /opt/redmine/Rakefile redmine:email:receive_imap host=imap.yandex.ru port=993 ssl=YES username=*** password=*** project=mail tracker=bug RAILS_ENV=production allow_override=project,tracker,status,category,priority priority=★★★★ no_permission_check=1 unknown_user=accept delete_unprocessed=1

Для выполнения через крон потребовалось в скрипт это всё завернуть и дописать пути:

text
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
rake -f /opt/redmine0/Rakefile redmine:email:receive_imap host=imap.yandex.ru port=993 ssl=YES username=*** password=*** project=mail tracker=mail RAILS_ENV=production allow_override=project,tracker,status,category,priority priority=★★★★ no_permission_check=1 unknown_user=accept delete_unprocessed=1 

Иначе, без указания PATH, "rake – команда не найдена".
В сам крон добавляю строку:

text
*/5 * * * *   /bin/bash /путь/до/скрипта.sh

От рута – всё работает.

Для повышения безопасности устанавливаю от имени пользователя redmine0. Стенд такой же, версии программ те же, только ruby и bundler устанавливаю от пользователя в его /home. А Redmine туда же, в /opt/redmine.
В итоге, выполняю команду из-под пользователя – выполняется, даже менять ничего не пришлось:

text
rake -f /opt/redmine/Rakefile redmine:email:receive_imap host=imap.yandex.ru port=993 ssl=YES username=*** password=*** project=mail tracker=bug RAILS_ENV=production allow_override=project,tracker,status,category,priority priority=★★★★ no_permission_check=1 unknown_user=accept delete_unprocessed=1

А крону не могу найти как путь правильный указать. Пути пользователя узнала командой (подсказали, не уверена, что правильно):

text
echo $PATH
/home/redmine0/.rvm/gems/ruby-2.3.0/bin:/home/redmine0/.rvm/gems/ruby-2.3.0@global/bin:/home/redmine0/.rvm/rubies/ruby-2.3.0/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/redmine0/.rvm/bin:/home/redmine0/.local/bin:/home/redmine0/bin

Добавляю этот путь в скрипт для крона, крон при выполнении выдает ошибку:

text
rake aborted!
LoadError: cannot load such file -- bundler/setup
/opt/redmine0/config/boot.rb:4:in `<top (required)>'
/opt/redmine0/config/application.rb:1:in `<top (required)>'
/opt/redmine0/Rakefile:5:in `<top (required)>'

Т.е. команда rake - найдена, выполняется (без путей не выполняется, ибо не найдена). Bundler установлен, работает, сайт Redmine работает на нем. Может какого-то ещё пути не хватает в PATH, поэтому bundler не найден?

13.10.2017 13:12 #425883

manik207, Вы хотите из домашней папки запустить?
А если так?

text
cd ~ && и далее как было
13.10.2017 13:23 #425884

Rizado, в скрипт был добавлен перед командой сначала

text
cd /opt/redmine && ...

Сейчас заменила на

text
cd ~ && ... 

Ошибка не поменялась:

text
rake aborted!
LoadError: cannot load such file -- bundler/setup...
13.10.2017 13:37 #425885
"manik207" написал:
bundler/setup

Где он лежит? Добавьте путь к этому файлу.

13.10.2017 14:02 #425886

lone_wolf, спасибо за ответ. Через команду:

text
find / |grep bundler/setup

нашла два файла:

text
/home/redmine0/.rvm/src/rubygems-2.6.13/bundler/lib/bundler/setup.rb
/home/redmine0/.rvm/gems/ruby-2.3.0/gems/bundler-1.13.5/lib/bundler/setup.rb

В PATH добавила пути к уже имеющимся:

text
/home/redmine0/.rvm/src/rubygems-2.6.13/bundler/lib:/home/redmine0/.rvm/gems/ruby-2.3.0/gems/bundler-1.13.5/lib

Но ошибка та же... Или я путь указала неправильно?

13.10.2017 14:09 #425887

В скрипте не надо указывать PATH. Достаточно указать полный путь до исполняемого файла, то есть rake.
Возможно проблема вообще не связана с путями.

Ну и совсем не хорошо ставить что-то со стороны непонятно куда. Неужели в вашем дистрибутиве нет redmine?

13.10.2017 14:36 #425888

Vascom, Вполне возможно, что проблема с путями не связана, поэтому обращаюсь за советом к более знающим людям. Такая связка в версиях (версии я указала неслучайно) требуется под ряд плагинов. От рута всё работает. И да, в моём дистрибутиве действительно нет redmine:

text
yum info redmine
Загружены модули: fastestmirror
Determining fastest mirrors
 * base: dedic.sh
 * epel: mirror.datacenter.by
 * extras: mirror.corbina.net
 * updates: dedic.sh
Ошибка: Совпадений среди пакетов не найдено
13.10.2017 15:26 #425889

Всем спасибо! Вопрос решен! Недоставало указания на окружение gems

1. Найти пути до GEM командой:

text
gem env

RubyGems Environment: - RUBYGEMS VERSION: 2.4.8 - RUBY VERSION: 2.3.0 (2015-12-25 patchlevel 0) [x86_64-linux] - INSTALLATION DIRECTORY: /home/redmine0/.rvm/gems/ruby-2.3.0 - RUBY EXECUTABLE: /home/redmine0/.rvm/rubies/ruby-2.3.0/bin/ruby - EXECUTABLE DIRECTORY: /home/redmine0/.rvm/gems/ruby-2.3.0/bin - SPEC CACHE DIRECTORY: /home/redmine0/.gem/specs - SYSTEM CONFIGURATION DIRECTORY: /home/redmine0/.rvm/rubies/ruby-2.3.0/etc - RUBYGEMS PLATFORMS: - ruby - x86_64-linux - GEM PATHS: - /home/redmine0/.rvm/gems/ruby-2.3.0 - /home/redmine0/.rvm/gems/ruby-2.3.0@global - GEM CONFIGURATION: - :update_sources => true - :verbose => true - :backtrace => false - :bulk_threshold => 1000 - REMOTE SOURCES: - https://rubygems.org/ - SHELL PATH: - /home/redmine0/.rvm/gems/ruby-2.3.0/bin - /home/redmine0/.rvm/gems/ruby-2.3.0@global/bin - /home/redmine0/.rvm/rubies/ruby-2.3.0/bin - /usr/local/bin - /usr/bin - /usr/local/sbin - /usr/sbin - /home/redmine0/.rvm/bin - /home/redmine0/.local/bin - /home/redmine0/bin

2. Найденные GEM PATHS добавить в скрипт строками:

text

export GEM_HOME=/home/redmine0/.rvm/gems/ruby-2.3.0@global
export GEM_PATH=/home/redmine0/.rvm/gems/ruby-2.3.0

Ранее указанные PATH оставляем. Всё работает!

Войдите или зарегистрируйтесь, чтобы ответить.