Назад | Перейти на главную страницу

Передать переменную среды другому пользователю при запуске от имени sudo

Я устанавливаю Tomcat на машину RHEL5, и у меня возникли проблемы с его запуском, потому что JAVA_HOME не установлен. Tomcat начинает использовать

sudo /sbin/service tomcat start

и работает под пользователем tomcat. Когда я вхожу в систему как я или как пользователь root, JAVA_HOME правильно установлен (используя /etc/profile.d/java.sh). Я предполагаю, что это не проходит должным образом через sudo.

Может ли кто-нибудь указать мне направление изменения, которое мне нужно внести, чтобы эта переменная прошла через sudo или была подобрана tomcat пользователь? Я считаю, что есть несколько способов.

заранее спасибо

Богатый

Один из способов сделать это - добавить JAVA_HOME в сценарий запуска tomcat, который должен находиться в /etc/init.d

Пытаться sudo -E <your command>. Это сохраняет (большую часть) окружающую среду. Видеть man sudo Чтобы получить больше информации.

Ответ Мазианни правильный.

Больше информации:

Для неинтерактивной оболочки /etc/profile не читается и поэтому /etc/profile.d/*.sh тоже не читаются.

JAVA_HOME устанавливается в вашей интерактивной оболочке. sudo удаляет большинство переменных среды. Вы можете настроить env_keep в /etc/sudoers позволять JAVA_HOME через, но если вы когда-нибудь настроите tomcat для автоматического запуска, этот метод больше не будет работать. (Следовательно, решение Мазианни является лучшим.)

Вы можете временно установить переменную перед выполнением в BASH. Это будет доступно следующей команде.

JAVA_HOME=/path/to/java sudo /sbin/service tomcat start

Читать man sudoers.

С помощью visudo (никогда не редактировать /etc/sudoers напрямую!), вы можете установить !env_reset чтобы глобально разрешить (большинству) переменных среды проходить через sudo, или добавить в env_keep какие конкретные переменные следует сохранить.