У меня есть один сервис на основе 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
в нашем скрипте выскочки?
Выскочка по умолчанию запустит задания в очень строгой среде. Мое предположение, почему это делает это по крайней мере по одной причине, то, что это не может предположить, что Вы хотите выполнить задание как корень или любого другого данного пользователя. Таким образом, это пытается быть строгим и безопасным по умолчанию.