我目前正在创建一个守护程序服务,为了利用现有的服务功能,启动脚本来自 /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
)。