= Сообщение: 729 из 3153 ================================== RU.LINUX.CHAINIK = От : Serguei E. Leontiev 2:5020/400 25 Jan 15 20:59:21 Кому : Alexey Vissarionov 25 Jan 15 20:59:21 Тема : Re: crontab... Что я делаю не правильно? FGHI : area://RU.LINUX.CHAINIK?msgid=<1187499052@ddt.demos.su>+ee9f7e99 На : area://RU.LINUX.CHAINIK?msgid=2:5020/545+54c50797 = Кодировка сообщения определена как: CP866 ================================== ============================================================================== From: "Serguei E. Leontiev" <leo@sai.msu.ru>
Привет Алексей,
От 25 января 2015 г., 18:11:18 в fido7.ru.linux.chainik ты писал: ??>>>>> В какой доке написана необходимость этого ??>>>>> мероприятия после смены TZ? ??>>>> Проблема в ошибочной наивной реализации POSIX в ??>>>> glibc, который считывает tzdata один раз за время ??>>>> жизни процесса, игнорируя дальнейшие изменения. ??>>> Временная зона - свойство процесса, а не системы. SL>> Твоя правда, только ты открой нормативную документацию SL>> POSIX и прочитай, что именно является этим свойством. SL>> Значение переменной окружения TZ - определяет правила SL>> преобразования, которые устанавливаются вызовом tzset(). AV> Процесс остался тем же, но вызвал setenv(); что должно AV> поменяться?
И в документации POSIX, и документации glibc - ясно же указано, что tzset() устанавливает правила, согласно значению переменной TZ, текущему значению.
И, насколько мне известно, tzset() работает так, как описано.
SL>> По POSIX тот же localtime() безусловно вызывает tzset(). SL>> Фактически же оно в glibc работает иначе, не так, как SL>> описано в документации и это ошибка. AV> Предлагаешь всякий раз заглядывать в /etc/localtime?
Это не единственный способ реализовать эквивалентность вызовов localtime() и "(tzset(), localtime())".
??>>>> Будем посмотреть, вот ты оформишь ли сообщение об ??>>>> ошибке glibc? Или оставишь Linux в его убогом ??>>>> положении и далее. ??>>> NAB. SL>> Перевод 'nab' AV> ... предельно прост: not a bug.
Hу да это не ошибка, а целый букет ошибок:
1. Очевидно crond функционирует некорректно: пользователь вносит задание согласно текущему состоянию временной зоны, а crond его исполняет согласно состоянию временной зоны на момент старта (предположительно, он сразу обращается к localtime() или tzset()). Вариантов три: свалить на ошибку glibc (ИМХО, предпочтительный), обеспечить адекватный вызов tzset() или описать в документации;
2. Функция localtime() работает не так, как описано в POSIX и своей документации. Вариантов два: исправить функцию, либо исправить документацию и отразить отличие от POSIX, что localtime() пользуется результатом tzset() и вызывает его, в случае если он ещё ни разу не был вызван ранее;
3. В случае, если избранный путь - послать POSIX со всеми остальными лесом и править документацию. Тогда надо научить дистрибутивы Linux, при обновлении tzdata, перезагружать всех демонов, которые используют localtime(). Си речь об улучшениях конфигурации systemd, ибо SVR5 init с этим явно не справится. :)
-- Успехов, Сергей Леонтьев. E-mail: lse@CryptoPro.ru