Сценарий upstart не выбирает системную переменную среды по умолчанию

У меня есть один сервис на основе OpenStack. Который мы используем upstart скрипт.

сценарий выскочка

# filename: /etc/init/myservice.conf

start on runlevel [2345] and started mountall
stop on runlevel [016]


env OS_SVC_ENABLE_CONTROL=1
export OS_SVC_ENABLE_CONTROL

pre-start script
  mkdir -p /var/run/myservice
  chown -R myservice:myservice /var/run/myservice
end script

respawn
# the default post-start of 1 second sleep delays respawning enough to
# not hit the default of 10 times in 5 seconds. Make it 2 times in 5s.
respawn limit 2 5

exec start-stop-daemon --start -c myservice --exec /opt/stack/bin/myservice --

post-start exec sleep 1

Когда я проверяю свою систему locale, его показ LANG=zh_CN.UTF-8,

root@localhost:~# locale | grep LANG
LANG=zh_CN.UTF-8
LANGUAGE=

Когда я запускаю сервис upstart, LANG отображается как пустая строка (означает, что не установлен для службы upstart)

Если бы я дал env LANG=zh_CN.UTF-8 в сценарии upstart, он работает нормально.

Почему выскочка не берет по умолчанию locale?

Почему мы должны установить то же самое env в нашем сценарии выскочки?

1 ответ

Upstart по умолчанию запускает задания в очень строгой среде. Я предполагаю, почему это происходит, по крайней мере, по одной причине: он не может предполагать, что вы хотите запустить задание от имени пользователя root или любого другого данного пользователя. Таким образом, он пытается быть ограниченным и безопасным по умолчанию.

Смотрите: http://upstart.ubuntu.com/cookbook/

Другие вопросы по тегам