为所有启动脚本和 inittab 设置环境变量 (TZ)

为所有启动脚本和 inittab 设置环境变量 (TZ)

我正在开发一个嵌入式 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/rcSexec /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 编写时区规则。

相关内容