文章
Michael Lei · 三月 12 阅读大约需 5 分钟

在Linux上设置TZ环境变量

在Linux上设置TZ环境变量

v2015.1的更新检查表建议在Linux平台上设置TZ环境变量,并指出了tzset的手册。建议这样做是为了提高Caché的时间相关功能的性能。你可以在下文找到更多关于这个的信息:

Linux TZ环境变量未被设置以及对Caché的影响

我的CentOS 7测试系统上的manpage(RHEL 6也是这样说的)有这样的说法。

"tzset()函数从TZ环境变量初始化tzname变量。   这个函数会被其他依赖时区的时间转换函数自动调用"。

那么,你如何设置TZ?它是如何影响Linux服务器上的时间的?让我们来看看我们能学到什么:

系统时区 --

对于我的测试,我在一个虚拟的CentOS系统上使用Ensemble 2016.1。首先让我们检查一下系统的时区。system-config-date工具可以告诉你。

那么"系统时钟使用UTC "是怎么回事?这指的是服务器的硬件时钟。在专用服务器上,UTC是很常见的。当Linux与Windows进行双启动配置时,情况并非如此(Windows的系统时钟使用本地时间)。

由于双启动配置在Cache'和Ensemble安装中并不常见,我就不多说了。这里的关键思想是,系统时区要设置为服务器的时区,并且硬件时钟时间要设置正确。

 

用户看见的时间和日期–

让我们看一看。这里是我的终端会话的一个截图:

看起来不错。我的shell进程(运行date命令)和我的Caché进程显示相同的时间,除了我需要输入WRITE命令的几秒钟。

设置 TZ 变量 --

现在让我们在环境中设置TZ。做到这一点的命令是tzselect。下面是一个设置TZ的命令输出的脚本:

[ehemdal@localhost ~]$ tzselect

Please identify a location so that time zone rules can be set correctly.

Please select a continent or ocean.

 1) Africa

 2) Americas

 3) Antarctica

 4) Arctic Ocean

 5) Asia

 6) Atlantic Ocean

 7) Australia

 8) Europe

 9) Indian Ocean

10) Pacific Ocean

11) none - I want to specify the time zone using the Posix TZ format.

#? 2

Please select a country.

 1) Anguilla              19) Dominican Republic    37) Peru

 2) Antigua & Barbuda     20) Ecuador               38) Puerto Rico

 3) Argentina             21) El Salvador           39) St Barthelemy

 4) Aruba                 22) French Guiana         40) St Kitts & Nevis

 5) Bahamas               23) Greenland             41) St Lucia

 6) Barbados              24) Grenada               42) St Maarten (Dutch)

 7) Belize                25) Guadeloupe            43) St Martin (French)

 8) Bolivia               26) Guatemala             44) St Pierre & Miquelon

 9) Brazil                27) Guyana                45) St Vincent

10) Canada                28) Haiti                 46) Suriname

11) Caribbean NL          29) Honduras              47) Trinidad & Tobago

12) Cayman Islands        30) Jamaica               48) Turks & Caicos Is

13) Chile                 31) Martinique            49) United States

14) Colombia              32) Mexico                50) Uruguay

15) Costa Rica            33) Montserrat            51) Venezuela

16) Cuba                  34) Nicaragua             52) Virgin Islands (UK)

17) Curacao               35) Panama                53) Virgin Islands (US)

18) Dominica              36) Paraguay

#? 49

Please select one of the following time zone regions.

 1) Eastern (most areas)            16) Central - ND (Morton rural)

 2) Eastern - MI (most areas)       17) Central - ND (Mercer)

 3) Eastern - KY (Louisville area)  18) Mountain (most areas)

 4) Eastern - KY (Wayne)            19) Mountain - ID (south); OR (east)

 5) Eastern - IN (most areas)       20) MST - Arizona (except Navajo)

 6) Eastern - IN (Da, Du, K, Mn)    21) Pacific

 7) Eastern - IN (Pulaski)          22) Alaska (most areas)

 8) Eastern - IN (Crawford)         23) Alaska - Juneau area

 9) Eastern - IN (Pike)             24) Alaska - Sitka area

10) Eastern - IN (Switzerland)      25) Alaska - Annette Island

11) Central (most areas)            26) Alaska - Yakutat

12) Central - IN (Perry)            27) Alaska (west)

13) Central - IN (Starke)           28) Aleutian Islands

14) Central - MI (Wisconsin border) 29) Hawaii

15) Central - ND (Oliver)

#? 1


The following information has been given:


      United States

      Eastern (most areas)


Therefore TZ='America/New_York' will be used.

Local time is now:      Tue May 31 11:21:04 EDT 2016.

Universal Time is now:  Tue May 31 15:21:04 UTC 2016.

Is the above information OK?

1) Yes

2) No

#? 1


You can make this change permanent for yourself by appending the line

      TZ='America/New_York'; export TZ

to the file '.profile' in your home directory; then log out and log in again.


Here is that TZ value again, this time on standard output so that you

can use the /usr/bin/tzselect command in shell scripts:

America/New_York

[ehemdal@localhost ~]$

文件~/.profile(如果它存在的话)会在你登录时运行,并为你设置TZ变量。如果你使用的是/bin/sh或/bin/bash以外的shell,你可能会使用一个不同的初始化文件。我设置了这个并重新登录。如果你更新一个文件,如/etc/profile,你可以为所有用户应用这个。