Sunday, October 4, 2009

time value too large/small to represent

После перезагрузки виртуальной машины, в жерле которой мирно крутятся некоторые Tcl CGI скрипты, эти самые скрипты внезапно перестали работать, выплевывая вот такое сообщение:

time value too large/small to represent
    while executing
"::tcl::clock::ConvertLocalToUTC $date[set date {}]  $TZData($timeZone)  $changeover"
    (procedure "::tcl::clock::scanproc'%A, %d %B %Y, %T'c" line 33)

Это была реакция на самую невинную комманду:

clock scan {Monday, 28 September 2009, 22:11:00} -format {%A, %d %B %Y, %T}

Конечно, она замечательно исполняется, если ее попробывать, например в tkcon. В же чем проблема?

Как оказалось, environment variable TZ при старте Apache (еще до login prompt в FreeBSD) не успевает быть установленной--то есть Apache ее inherit, если она есть. А для этого нужно:

# setenv TZ Europe/Kiev
# /usr/local/etc/rc.d/apache22 restart

И тогда все начинает опять работать правильно. Капитан Очевидность потирает руки.

Или, можно, на всякий случай, всегда устанавливать TZ руками в Tcl-скрипте:

set env(TZ) Europe/Kiev

Или, сделать вот такой симлинк:

# ln -s /usr/share/zoneinfo/Europe/Kiev /etc/localtime

Последний способ, по идее, есть самый универсальный.

No comments:

Post a Comment