我正在开发一个嵌入式 Linux 系统,并正在寻找一种为所有进程设置时区的方法。
问题是:是否有可能TZ
在启动时设置环境变量(初始化脚本),以便所有其他初始化脚本TZ
在启动时都已设置?
该系统基于 BusyBox 工具。我尝试了文件夹中的脚本/etc/profile.d/
。
export TZ="GMT-1"
但初始化脚本没有设置变量。
我看到的唯一方法是全部启动脚本自行设置此变量。对于这个问题还有其他解决方案吗?
答案1
如果您的系统使用 BusyBox init,并且没有/etc/inittab
,那么它会/etc/init.d/rcS
在启动时运行。如果这是一个 shell 脚本,只需在其中添加所需的环境定义即可。如果这不是 shell 脚本,您可以将构建更改为 rename /etc/init.d/rcS.bin
,并创建一个/etc/init.d/rcS
以exec /etc/init.d/rcS.bin
.当然,如果您更改了/etc/init.d/rcS
构建配置中的路径,请进行调整。那里定义的环境变量将应用于所有守护进程,但不适用于在控制台上启动的 shell。
如果有/etc/inittab
,请检查其中包含的内容。该文档位于样本文件。您可以替换somecommand
由运行的条目/usr/bin/env TZ=GMT-1 somecommand
。
这是一种快速而肮脏的方法,但在大多数情况下,您希望允许最终用户配置时区,因此应将其存储在单独的文件中。在这种情况下,请通过 shell 包装器(或脚本rcS
)并使用一些代码,例如
export TZ="$(cat /etc/TZ.txt)"
请注意,根据您的 libc,可能有也可能没有更好的设置时区的方法,例如/etc/TZ
为 uClibc 编写时区规则。