Я использую Ubuntu 9.1 (Кармическая Коала) на моем сервере.
Простой вопрос установки переменных среды так, чтобы они были глобально доступны через все процессы, сводит меня с ума, и я ценил бы некоторую справку!
Я попытался установить их при помощи команды экспорта в нескольких других 'обычных подозреваемых' местоположения, такие как .bashrc, .bashrc, .profile. Они работают отлично для самой оболочки и процессов, разветвленных от оболочки, но не для процессов, запущенных вне оболочки (например, демоны, начатые во время начальной загрузки или особенно раздражающие для меня, - то, что Полукровка, запущенная Capistrano, кажется, не устанавливает эти переменные, и следовательно Ruby не имеет доступа к ним).
Я также попробовал некоторые сумасшедшие идеи как установка их в сценарии оболочки и вызове этого сценария в течение времени начальной загрузки (с помощью метода обновления-rc.d) напрасно.
В Windows можно просто определить "системную переменную", которая становится доступной через все процессы в ОС. Как делает каждый делает это в Linux; конкретно Debian основывал ОС?
Процессы (включая оболочки) только наследовали переменные от своих родителей. Нет никакого способа изменить их с внешней стороны после этого.
Установите "глобальные переменные" как рано в начальной загрузке (для системных процессов) или окружите вызов (для пользовательских процессов) как возможный, или подчинитесь установке их в нескольких местах.
Это может походить на боль, но способность изменить другую среду процессов была бы ошибкой и представит все виды противных условий состязания.
Что Вы пытаетесь сделать это, Вы хотите "глобальные" переменные среды? Может быть способ работать вокруг Вашей проблемы.
Обходное решение:: Запишите минимальный сценарий в своем любимом формате оболочки, который только устанавливает переменную, Вы хотите и кладете его на глобально доступное место:
/etc/loglocaltion.sh
:
export MY_LOG_DIR=/opt/share/mylog
export MY_DEFAULT_LOG_LEVEL=URGENT
и для всего, что Вы хотите использовать ту конфигурацию, делают один из
source
редактор loglocation.sh в он - неинтерактивный файл входа в систему (тот, который читается из всех экземпляров оболочки, т.е. .bash_profile
).loglocation.sh
прежде, чем запустить реальную программу. launchcorelogger.sh
:
CORELOGGER=/opt/sbin/mycorelogger
source /etc/loglocation.sh
exec $CORELOGGER
и имейте init
запустите скрипт.
Теперь редактирования к loglocation сценарию произведут всю связанную обработку, если Ваше выполнение их от новой оболочки в первом случае или перезапустит их использующий Вас системы dameon перезапущенный (/etc/init.d/mycorelogger restart
или безотносительно).