Установка переменных среды в Linux для всех процессов

Я использую Ubuntu 9.1 (Кармическая Коала) на моем сервере.

Простой вопрос установки переменных среды так, чтобы они были глобально доступны через все процессы, сводит меня с ума, и я ценил бы некоторую справку!

Я попытался установить их при помощи команды экспорта в нескольких других 'обычных подозреваемых' местоположения, такие как .bashrc, .bashrc, .profile. Они работают отлично для самой оболочки и процессов, разветвленных от оболочки, но не для процессов, запущенных вне оболочки (например, демоны, начатые во время начальной загрузки или особенно раздражающие для меня, - то, что Полукровка, запущенная Capistrano, кажется, не устанавливает эти переменные, и следовательно Ruby не имеет доступа к ним).

Я также попробовал некоторые сумасшедшие идеи как установка их в сценарии оболочки и вызове этого сценария в течение времени начальной загрузки (с помощью метода обновления-rc.d) напрасно.

В Windows можно просто определить "системную переменную", которая становится доступной через все процессы в ОС. Как делает каждый делает это в Linux; конкретно Debian основывал ОС?

4
задан 22.02.2010, 17:07

1 ответ

Процессы (включая оболочки) только наследовали переменные от своих родителей. Нет никакого способа изменить их с внешней стороны после этого.

Установите "глобальные переменные" как рано в начальной загрузке (для системных процессов) или окружите вызов (для пользовательских процессов) как возможный, или подчинитесь установке их в нескольких местах.

Это может походить на боль, но способность изменить другую среду процессов была бы ошибкой и представит все виды противных условий состязания.


Что Вы пытаетесь сделать это, Вы хотите "глобальные" переменные среды? Может быть способ работать вокруг Вашей проблемы.

Обходное решение:: Запишите минимальный сценарий в своем любимом формате оболочки, который только устанавливает переменную, Вы хотите и кладете его на глобально доступное место:

/etc/loglocaltion.sh:

export MY_LOG_DIR=/opt/share/mylog
export MY_DEFAULT_LOG_LEVEL=URGENT

и для всего, что Вы хотите использовать ту конфигурацию, делают один из

  1. запустите его от оболочки, которая имеет sourceредактор loglocation.sh в он - неинтерактивный файл входа в систему (тот, который читается из всех экземпляров оболочки, т.е. .bash_profile).
  2. запишите минимальный сценарий обертки который источники loglocation.sh прежде, чем запустить реальную программу. launchcorelogger.sh:

 

 CORELOGGER=/opt/sbin/mycorelogger
 source /etc/loglocation.sh
 exec $CORELOGGER

и имейте init запустите скрипт.

Теперь редактирования к loglocation сценарию произведут всю связанную обработку, если Ваше выполнение их от новой оболочки в первом случае или перезапустит их использующий Вас системы dameon перезапущенный (/etc/init.d/mycorelogger restart или безотносительно).

7
ответ дан 07.12.2019, 19:25

Теги

Похожие вопросы