一台測試伺服器,之前設定為Asia/Shanghai
,但是前兩天突然時區失效了。
失效之前曾經升級過libc-2.12.so -> libc-2.14.so
,不知道有沒有關係。
# date
Fri Feb 10 07:01:22 Local time zone must be set--see zic manual page 2017
# date -R
Fri, 10 Feb 2017 07:14:10 +0000
用了tzselect
重新選擇,無效。
重置/etc/localtime
,無效
rm -f /etc/localtime
cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
/etc/sysconfig/clock
設定也無效
ZONE="Asia/Shanghai"
TZ="Asia/Shanghai"
UTC=false
ARC=false
最後在.bash_profile
裡面設定TZ='America/Nassau'; export TZ
,卻只對目前使用者有效,對其他使用者還是無效的。
# sudo -u www-data date
Fri Feb 10 06:52:02 Local time zone must be set--see zic manual page 2017
系統版本如下:
LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-noarch
Distributor ID: CentOS
Description: CentOS release 6.4 (Final)
Release: 6.4
Codename: Final
google,百度都翻了個底,還是找不到解決方法,只能來這裡求助了。
好吧,自己解決了。
原因就是升級
libc.so.6
導致的!GNU中對TZ環境變數的說明中指出,如果
TZ
没有值,会默认选择时区,具体地址由libc.so.6这个库决定。在升级前,centos的默认时区文件为/etc/localtime
。而我新编译的库时,设置了--prefix=/usr/local/glibc-2.14
,导致默认路径为变成了/usr/local/glibc-2.14/etc/localtime
,自然就找不到預設時區了。解決方案:
done!