Изменить пользователя и загрузить всю среду в сценарии оболочки

9

У меня возникли некоторые проблемы с нашим авторским скриптом, который меняет пользователя и запускает несколько процессов ruby ​​daemon.

В прошлом я просто bash -c "do the business" -l someuserиспользовал -lфлаг для эмуляции входа в систему.

До сих пор это прекрасно работало, наш процесс ruby ​​выдавал следующую ошибку: require: no such file to load -- rubygems (LoadError)после некоторого исследования я обнаружил, что эта ошибка возникает только тогда, когда я запускаю скрипт от имени пользователя root, то есть (когда я sudo suзапускаю upstart).

Я думаю, что это проблема ПУТИ, так как, когда я сначала вручную устанавливаю путь, это решает проблему.

Есть ли способ изменить пользователя и загрузить всю среду?

Я тоже пробовал su user -cи sudo.


Чтобы упростить тестирование, я "рутирую" ( sudo su) и работаю which bundle(связка - вещь рубина).

Вот что я получаю:

  • sudo -i -u webuser which bundle # => нет вывода
  • su -l webuser -c which bundle # => нет вывода
  • sudo su - webuser -c which bundle # => нет вывода

Но ssh'd в качестве веб-пользователя

  • which bundle # => / opt / ruby ​​/ bin / bundle
Даниэль Аптон
источник
1
Ты пробовал su - user -c?
Карлсон
Какое распределение это?
artistoex
Ваш скрипт зависит от установленных пользователем модулей ruby?
Кит
@artistoex это Ubuntu :)
Даниэль Аптон
1
Я хотел бы убедиться, что это действительно проблема PATH (сбросить переменную в сценарии). Затем сравните пути и посмотрите на /etc/profile ~/.bash_profile ~/.bash_loginи ~/.profile. Для оболочек входа в систему bash оценивает их в заданном порядке.
artistoex

Ответы:

10

Использование sudo su - user -cсделает так, как будто вы вошли в систему как тот человек, который наследует их путь. Вот почему su userотличается отsu - user .

Однако, если вы задаете путь в .bashrcфайле, он вступит в силу только для интерактивных сеансов (т. Е. Ssh-в качестве этого пользователя).

Вместо этого вы должны использовать .bash_profileили /etc/profile, увидеть это .

Nate
источник
3
Вы должны отметить это su -и su -lявляются синонимами.
Иордания
3
и, вероятно, следует рекомендовать --loginдля удобства чтения.
3

Для контекста входа используйте:

  • sudo -i -u USER COMMAND
  • su -l USER -c COMMAND
Х.-Дирк Шмитт
источник