为什么 rc.status 文件设置 LC_ALL 语言环境

为什么 rc.status 文件设置 LC_ALL 语言环境

我目前正在创建一个守护程序服务,为了利用现有的服务功能,启动脚本来自 /etc/status。

这会导致我们的服务出现问题,因为在第一行中,区域设置设置为 POSIX:

# Do _not_ be fooled by non POSIX locale
LC_ALL=POSIX
export LC_ALL

问题是从脚本启动的服务会继承此区域设置。解决此问题的简单方法是在启动子进程之前取消设置区域设置。但是,我不知道这意味着什么。从 rc.status 获取数据后重新设置 LC_ALL 变量会产生什么后果?

答案1

许多系统守护进程在使用非 POSIX 语言环境调用时会表现得很奇怪。特别是,它们通常不处理 UTF-8 排序规则,这种排序规则会忽略大小写和标点符号。非 POSIX 时间格式还可能导致标准工具无法解析日志文件,而标准工具通常需要固定的时间格式。更罕见的是,LC_CTYPE可能会导致问题。

一般来说,如果您需要在守护程序中进行系统范围的区域设置,您应该在/etc/sysconfig/language加载后获取它rc.status。 (这是假设某种 SuSE,这似乎是安全的rc.status;如果它是 BSD,我不知道它当前存储在哪里。)变量将是带有RC_前缀的常见变量(例如RC_LC_ALL)。

相关内容