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

Kla*_*aus 5 startup environment-variables busybox timezone busybox-init

我正在研究嵌入式 Linux 系统,并正在寻找一种为所有进程设置时区的方法。

问题是:是否有可能TZ在启动时设置环境变量(init 脚本),以便所有其他 init 脚本TZ在启动时设置?

该系统基于 BusyBox 工具。我在/etc/profile.d/文件夹中尝试了一个脚本。

export TZ="GMT-1"
Run Code Online (Sandbox Code Playgroud)

但是 init 脚本没有设置变量。

我看到的唯一方法是所有启动脚本自己设置这个变量。这个问题还有其他解决方案吗?

Gil*_*il' 4

如果您的系统使用 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)"
Run Code Online (Sandbox Code Playgroud)

请注意,根据您的 libc,可能有也可能没有更好的设置时区的方法,例如为/etc/TZuClibc 编写时区规则。