LINUX.ORG.RU
ФорумAdmin

инициализация переменной среды LC_ALL по умолчанию

 , ,


0

3

Здравствуй, ЛОР.

Есть у меня небольшая проблема, с которой пока что не удается побороться. Прошу прощения, если вопрос реально тривиальный. Честное слово, уже перечитал много чего, и хоть проблема сама по себе решена, но остается один нюанс, который не выходит решить.

У меня есть init.d скрипт, который запускает мою службу вот таким вот образом:

/bin/su - root -c «/path/to/bin/ -key1 -key2»

Как я выяснил, su в такой дефолтной конфигурации имеет неприятную особенность, которая заключается в том, что он не сохраняет переменные среды, из-за чего у меня ломается кодировка.

Необходимо сделать так, чтобы su подсасывал необходимые мне переменные среды (в моем случае LC_ALL), но это нужно сделать без редактирования init.d скрипта, поскольку при любом обновлении моей службы данный файл затирался и приходилось бы его обновлять вручную (да, воспользоваться менеджером управления конфигурацией я не могу, увы).

С уважением!

У меня есть init.d скрипт, который запускает мою службу вот таким вот образом

А на фейхуа тебе там su? Скрипты же и так запускаются от рута.

это нужно сделать без редактирования init.d

Замутить /etc/defaults/myservice и подсасывать из него переменные в скрипте.

Radjah ★★★★★
()
Ответ на: комментарий от Radjah

А на фейхуа тебе там su? Скрипты же и так запускаются от рута.

К сожалению, вопрос не мне, вопрос к компании HP, продуктом которой мне приходится пользоваться. Ентерпрайз, батенька, он суровый.

Замутить /etc/defaults/myservice и подсасывать из него переменные в скрипте.

Спасибо, сейчас попробую.

ivan_dav
() автор топика
Ответ на: комментарий от Radjah

Добавил в файл в /etc/default/myservice сначала LC_ALL=ru_RU.utf8, потом поменял на export LC_ALL=ru_RU.utf8, но видимых изменений это не дало. ЧЯДНТ?

ivan_dav
() автор топика
Ответ на: комментарий от Radjah

Тоже самое. Ноль реакции. По сути же все это должно вступить в силу после перезагрузки самой службы? Верно?

ivan_dav
() автор топика
Ответ на: комментарий от ivan_dav

Вы сюда лучше весь init скрипт доставьте. Чтобы понять, как мы можем обхитрить это.

/etc/defaults - это какие-то бабушкины сказки. Есть /etc/default/название_сервиса, туда пишут переменные, однако, source'сятся они оттуда с помощью . /etc/default/название_сервиса, или, в systemd, через параметр в Unit файле - EnvironmentFile=-/etc/sysconfig/foobar.

Просто так оттуда ничего не будет забираться. С такими ограничивающими требованиями и без полных исходников init скрипта разговор неконструктивный получается.

zuzzas
()
Ответ на: комментарий от ivan_dav

По результатам осмотра твоего /etc/init.d/my_service, вот такой хак предлагаю добавить в /etc/profile. . (my_service - это имя init-скрипта!)

...
BN=$(basename "$0")
if [ "$BN" = "my_service" ] ; then
    LC_ALL=ru_RU.utf8; export LC_ALL;
fi
..

А если не жалко, то просто LC_ALL=ru_RU.utf8; export LC_ALL; для всей системы целиком, без условий

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)
Ответ на: комментарий от Deleted

А если не жалко, то просто LC_ALL=ru_RU.utf8; export LC_ALL; для всей системы целиком, без условий

Это делается одной строкой.
export VAR="bla-bla-bla"

LC_ALL=ru_RU.utf8 смотри выше инициализация переменной среды LC_ALL по умолчанию (комментарий)

anc ★★★★★
()

который запускает мою службу вот таким вот образом

волшебное слово «мою»
У вас написано /path/to/bin/
который можно заменить на скрипт который стартанет ваш /path/to/bin/на-что-поменяли
А в самом скрипте перед стартом внести изменения в env какие вам нужны.

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anc

Вроде у ТС инит и /path/to/bin под пакетным менеджером, и их изменять нельзя, после обновления все вернется взад. А так, идея со скриптом-запускателем мне нравится, поддерживаю

Deleted
()
Ответ на: комментарий от Deleted

Да, все именно так. Инит скрипт попросту затрется после очередного обновления, и опять вся кодировка полетит. С /etc/profile попробую поиграться, хотя вообще я уже пробовал добавлять это в profile.d, ну да ладно, спасибо огромное.

ivan_dav
() автор топика
Ответ на: комментарий от Deleted

Попробовал повертеть, но не взолетело чот :(

ivan_dav
() автор топика
Ответ на: комментарий от Deleted

Тут, кстати, еще веселая вещь. Коллега показал фокус. Если инит файл запускать вручную, т.е. /etc/init.d/myservice, то все хорошо взлетает. Даже и не знаю, что после такого сказать.

ivan_dav
() автор топика
Ответ на: комментарий от ivan_dav

Да, все именно так. Инит скрипт попросту затрется после очередного обновления

Я писал не про замену инит скрипта а про /path/to/bin. Но не суть.
Еще как вариант, обновления же не из воздуха прилетают, по итогам обновления можно скрипт накалякать, который поменяет все так как вам нужно.

anc ★★★★★
()
Ответ на: комментарий от ivan_dav

Вновь подниму собственную тему. Редактирование init.d не слишком помогает. После ребута все настройки слетают, локаль откатывается в прежнее состояние. У кого-нибудь есть мысли, что бы это могло все значить, и как мне быть?

ivan_dav
() автор топика
Ответ на: комментарий от anc

Стоп, перечитал еще раз с начала. У вас su - root т.е. один фиг переменные будут те которые у рута, если не напрягает кириллица под рутом то можно в /root/.bash_profile прописать, если напрягает то как писал выше инициализация переменной среды LC_ALL по умолчанию (комментарий)

anc ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.