我有一个基于 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
新贵脚本,它就能正常工作。
为什么新贵不采取默认措施locale
?
为什么我们必须env
在 upstart 脚本中进行相同的设置?
答案1
Upstart 默认会在非常严格的环境中启动作业。我猜它这样做的原因至少有一个,那就是它无法假设您想以 root 或任何其他给定用户的身份运行作业。因此,默认情况下,它会尝试严格且安全。