LINUX.ORG.RU

date не читает /etc/localtime

 


0

1

Добрый день! Есть проблема с командой date, по каким то причинам она не читает /etc/localtime, а сразу пытается обратиться к файлу /usr/share/zoneinfo/Europe/Moscow независимо от того, какие изменения происходят в /etc/localtime. coreutils переустанавливал (туда входит бинарник date), по контрольной сумме он совпадает с date на других машинах, там где date работает корректно. Вывод strace доказывает этот момент

execve("/bin/date", ["date"], [/* 18 vars */]) = 0
brk(0)                                  = 0x1971000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9d3a2bd000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=35246, ...}) = 0
mmap(NULL, 35246, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9d3a2b4000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0P\34\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1738176, ...}) = 0
mmap(NULL, 3844640, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f9d39cf4000
mprotect(0x7f9d39e95000, 2097152, PROT_NONE) = 0
mmap(0x7f9d3a095000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1a1000) = 0x7f9d3a095000
mmap(0x7f9d3a09b000, 14880, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f9d3a09b000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9d3a2b3000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9d3a2b2000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9d3a2b1000
arch_prctl(ARCH_SET_FS, 0x7f9d3a2b2700) = 0
mprotect(0x7f9d3a095000, 16384, PROT_READ) = 0
mprotect(0x60e000, 4096, PROT_READ)     = 0
mprotect(0x7f9d3a2bf000, 4096, PROT_READ) = 0
munmap(0x7f9d3a2b4000, 35246)           = 0
brk(0)                                  = 0x1971000
brk(0x1992000)                          = 0x1992000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=2855152, ...}) = 0
mmap(NULL, 2855152, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f9d39a3a000
close(3)                                = 0
open("/usr/share/zoneinfo/Europe/Moscow", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=1253, ...}) = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=1253, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9d3a2bc000
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\f\0\0\0\f\0\0\0\0"..., 4096) = 1253
lseek(3, -763, SEEK_CUR)                = 490
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\f\0\0\0\f\0\0\0\0"..., 4096) = 763
close(3)                                = 0
munmap(0x7f9d3a2bc000, 4096)            = 0

★★★

Ответ на: комментарий от init_

Ээээ?

Я прям стесняюсь спросить, а откуда тогда он определяет текущую таймзону хоста? Как он понимает, что надо именно в /usr/share/zoneinfo/Europe/Moscow идти, а не в какую-нибудь Антарктиду?

slamd64 ★★★★★ ()
Ответ на: комментарий от slamd64

Переменная TZ

Если она пустая:

mike@pet ~ $ strace date 2>&1 | grep localtime
openat(AT_FDCWD, "/etc/localtime", O_RDONLY|O_CLOEXEC) = 3

Файл читается

Если она не пустая:
mike@pet ~ $ export TZ="Europe/Moscow"
mike@pet ~ $ strace date 2>&1 | grep localtime
mike@pet ~ $ 

Файл не читается

imul ★★★★★ ()
Последнее исправление: imul (всего исправлений: 1)