We rise up for the things we believe in over and over again

Казалось бы, все хорошо. Прихожу домой с очередной ночной смены, тыкаю в клавиатуру, чтобы монитор проснулся. Вроде все хорошо, система работает, байты летают, синхронизация всего и всея тоже в порядке. Вскипятил чай, сижу, читаю, попиваю себе. И вдруг взгляд падает на часы. А там швах - время почему-то на час больше, и я уже опаздываю. Ничего не понимаю, не мог час так быстро пробежать, в конце концов, я не в DMC 4 сидел.
Проверяю время на мобильнике - ровно столько, сколько и должно быть. Вывод - комп брешет. А брехать он может только в одном случае - перевод стрелок, который в нашей стране отменен. Лезу в настройки - RTZ2, как и полагается. Про перевод часов эта часовой пояс не знает вообще ничего. Мистика.
Ок, логи. Расскажите мне, что случилось:
get-winevent system | where {$_.message -like "*clock*"} | select -first 1 | fl *
И получаем просто прекрасное:
Так. Система попыталась синхронизироваться с аппаратными часами, а это BIOS. Черт побери, он не обновлялся уже лет этак несколько (MSI, я век вам буду помнить ту бета-прошивку, где вы хотели виртуализацию включить). Настроек часовых поясов там нет. Но проверить надо. Рестарт, экран BIOS, прошерстить все. Нет. Ничего нет.
Загрузка системы, беглое ковыряние гугла. Гугл подсказывает, что подобные пляски со временем начинаются, когда система запускает задачу на синхронизацию времени и пояса. За это отвечают две задачи, забитые в планировщик: SynchronizeTime и SynchronizeTimeZone. Проверил, когда они в последний раз запускались. Не то, они выполнялись два дня назад. Ладно, может быть я что-то упускаю?
get-scheduledtask | get-scheduledtaskinfo | sort lastruntime | ft taskname,Lastruntime
То есть в то время, когда произошел перевод часов, не выполнялась ни одна задача, даже близко нет.
Похоже, что эту загадку решить еще только предстоит.
У меня та же фигня была. Просыпаюсь – два часа. Окей, полежу и пойду поработаю. Пять минут полежала, смотрю – три часа. Сначала офигела, а потом вспомнила, что это какой-то загадочный глюк японского старого скринсейвера с часами. В дни перевода стрелок он почему-то начинает показывать то одно время, то другое. При чём, в системе время не переводится вообще, а в настройках часового пояса нет ничего про перевод. Не знаю, что он делает, но раз в два года конфузит.
Кстати, для своих нужд я сделала собственные часовые пояса, чтобы не зависеть от постоянно ломающихся системных. Правда, надо будет твик адаптировать для Нанами и выше, а то там формат поменялся видимо. Система видит часовые пояса, но не выбирает – говорит, что данные неправильные.
А вот ещё прикол. На линупс сервере я ставлю часовой пояс как в текущей локации, чтобы не путаться. С этим связана одна история. Там часовые пояса время от времени обновляются (пакет tzdata), и пару раз было, что я не могла найти нужный. Тоесть в настройках пакета очень много городов без пояснения, что это за часовой пояс, и периодически бывает, что ближайший выбрать не получается – приходится тыкать в иностранные города. А список большой, так что бегать по нему трудно. Но! В списке есть числовые пояса, типа, UTC+08:00. Но и с ними была проблема, потому что время и дата сбивались и оказывались не теми, которые ожидаешь. Я обратилась к коллективному разуму в пойнтожуйки, где началась стандартная «Юзай города – выбери ближайший – у тебя руки кривые». Но нашёлся человек, который дал ссылку на описание бага. Оказывается, что в POSIX часовых поясах ПЕРЕПУТАН ЗНАК. Тоесть UTC+08:00 нужно читать как UTC-08:00 и наоборот. Багу не один десяток лет, но все привыкли и исправлять никто не собирается.
Черт побери, он не обновлялся уже лет этак несколько
После эпопеи с покупкой ремонтом материнской платы и покупки новой, я не обновляюсь без острой нужды ^^'
Сильно О.О Вот вам и открытый софт, код ревью и прочая прочая... Впрочем, эта открытость уже была проверена на прочность - при помощи Heartbleed, которая на поверку оказалась древнючей. Но хоть пофиксили быстро.
приходится тыкать в иностранные города
Да, помню я те времена, к счастью, недолгие, когда некоторые машины на работе во время "кризиса времени" пришлось уводить куда-то то ли в Турцию, то ли еще куда-то (они тогда еще на XP сидели)
я не обновляюсь без острой нужды
В том и проблема - у меня как раз нужда. Именно эта прошивка должна была разблокировать в BIOS всякие разные Intel VT и подобную нечисть. Была. Ровно до тех пор, пока я не прочитал, что MSI ту прошивку мало того, что не выпустили из бета-стадии, так и вообще свернули поддержку моей материнской платы. С тех пор лично мое мнение - в компании MSI работают пдрасы
Эх, а возможность плодить на своей домашней машине в VMWare виртуалки под управлением Win 2012 была так близка... Увы, апгрейд неизбежен, но цены, ценыыы...
Ничего любопытного не замечаешь?
На самом деле там вопрос обратной совместимости. Когда дошли руки до исправления бага, оказалось, что на него повсюду костыли понаставлены, так что если его исправить, то поломается всё. По крайней мере я так поняла.
В том и проблема - у меня как раз нужда.
Ну, это да. У меня из проблем – только сообщение, что процессор неизвестен, обновите BIOS ^^' Ну, может быть в новой прошивке ещё добавят вменяемое меню выбора устройства для загрузки, но это не так критично, линуксы с флэшки я не часто гружу.
/* Кстати, у меня занятная проблема. В порядке устройств для загрузки у меня винты отображаются не по номерам, а по именам. И так случилось, что у меня два одинаковых винта одинаковой ёмкости. Я боюсь менять порядок, чтобы первым не выбрался не тот винт, хотя, возможно, он просто пойдёт грузиться со второго. */
Ничего любопытного не замечаешь?
Вижу задачи, запланированные на 1999 год. Подозреваю, что это сделано для ручного запуска задач (или из других программ) с системной учёткой. 1999 год выставлен с расчётом на то, что при неожиданных сбросах времени у материнок, на которых работает система, время по умолчанию будет сильно позже, поскольку железо современное, и данные задачи не запустятся самопроизвольно.
Где там известный герб программистов?
Я боюсь менять порядок
А чего его бояться? Если у тебя загрузочный винт всего один, а в приоритете будет "не тот" - система нарвется на невозможность загрузки с "не того" харда, после чего автоматом перейдет к другому и стартует с него. Просто времени на загрузку потратится чуть больше
Вот если загрузочных винтов два - тогда веселее
Вижу задачи, запланированные на 1999 год
Неа, "ты не внимательна". Они не запланированы на 1999 год, все эти задачи по показаниям винды пытались запуститься в последний раз в этом году
Видишь код, с которым завершилась задача EDP Policy Manager? Так вот - такой код говорит следующее:
SCHED_S_TASK_HAS_NOT_RUN
0x00041303
The task has not yet run.
У меня мозг взрывается, когда я вижу подобное
Хохмы ради я попытался посмотреть, когда подобные задачи должны запускаться. Результат показан на том же скрине. То же самое, кстати, и для действий. Их тоже толком не посмотреть.
Опять же, хохмы ради проверил, что покажет в плане условий запуска Powershell. Просто суперинформативный вывод:
А теперь самая мякотка. Задачи, не-/запущенные в 1999 году, это лишь часть шарады. Посмотрев повнимательнее на все остальные задачи, которые таки хоть раз, но выполнялись за время жизни этой системы, ты увидишь, что в них всех во времени последнего запуска совпадают минуты и секунды. Почему так - я пока не знаю
– Почему бог создал мир всего за семь дней, а вы программу не можете уже год написать?
– У бога не было проблемы обратной совместимости.
Вот если загрузочных винтов два - тогда веселее
К счастью, только один ^^
Неа, "ты не внимательна". Они не запланированы на 1999 год, все эти задачи по показаниям винды пытались запуститься в последний раз в этом году
Щьёрт ^^'
У меня мозг взрывается, когда я вижу подобное
Вероятно, такая дата связана с дефолтным значением, получаемым из пустого значения. Это объясняет, почему даты вплоть до секунд совпадают.
А теперь самая мякотка. Задачи, не-/запущенные в 1999 году, это лишь часть шарады. Посмотрев повнимательнее на все остальные задачи, которые таки хоть раз, но выполнялись за время жизни этой системы, ты увидишь, что в них всех во времени последнего запуска совпадают минуты и секунды. Почему так - я пока не знаю
Вероятно, потеря точности в значениях даты, которое, вероятно, хранится в VARIANT_DATE, которое Double с временем в дробной части OO
О даааа... .NET в этом плане показателен. Очень приятно видеть, как у тебя в списке установленного формируется самый настоящий зоопарк с 1.1 по 4.чего-то-там.
такая дата связана с дефолтным значением
Да не, мозг вырывает с корнями не дата, а ситуация: Last Run Time есть - задача, как минимум, попыталась выполниться. Код выполнения(!) говорит ровно обратное - задача не выполнялась вообще(!!!). Прям хрестоматийное - Program encountered error: operation completed successfully.
Вероятно,..., которое, вероятно, ..., которое ... OO
Молодец
Get-ScheduledTask "EDP Policy Manager" | select -expand Triggers | select -expand CimInstanceProperties | еще-какой-нибудь-select | еще-какой-нибудь-where | еще-какой-нибудь-sort | еще-какой-нибудь-format
для тебя сложностей не представят =^.^=
Пложение версий дотнетов – это как раз часть идеи с отсутствием проблемы обратной совместимости и победы над DLL Hell. Ранее для этого в Windows XP придумали Side-by-side execution.
Да не, мозг вырывает с корнями не дата, а ситуация: Last Run Time есть - задача, как минимум, попыталась выполниться. Код выполнения(!) говорит ровно обратное - задача не выполнялась вообще(!!!). Прям хрестоматийное - Program encountered error: operation completed successfully.
Ты не понимаешь о чём я говорю. Допустим есть некий объект, который выдаёт информацию о задачах, который использует тот же самый шедулер в качестве бэкэнда. У объекта есть свойства вроде командной строки, каталога, последнего статуса и даты последнего выполнения. В случае с кодом и командной строкой всё просто. Код – какой-нибудь long, который по умолчанию 0, а вообще устанавливается в специальную константу, которая говорит, что задача не выполнялась. У командной строки тип, например, BSTR, такой стринг в OLE. У него значение по умолчанию – строка нулевой длины. А вот с датой сложнее. Дата – это VARIANT_DATE, который на самом деле Double, представляющий смещение, скажем, в секундах от 1 января 1899 года. Очевидно, у него нет значения, которое обозначало бы, что переменная не инициализирована и не содержит полезных данных. 1.01.1899 – это валидная дата, которая может означать конкретный момент времени. Для пользователя очевидно, что компьютеров тогда не существовало, но для кода всё в порядке. Поэтому когда GUI планировщика рисует информацию о задании, он выводит командную строку, статус с пояснением, что задание ещё не выполнялось, и валидную дату со значением ноль. Возможно, в кода стоило проверять статус и не выводить дату вообще, но про это забыли и или ещё что случилось. В итоге у тебя получается ситуация из примера.
Повторяю, я не знаю, откуда конкретно берётся дата из твоего примера. Но то, что у кучи не запускавшихся заданий абсолютно одинаковые дата и время последнего запуска, наводит на мысль, что это некое значение по умолчанию, тот самый ноль ака 1.01.1899. То, что GUI планировщика выводит это значение без оглядки на код состояния, говорит о том, что индусы что-то напутали или забыли. Вот и всё.
Ну да, нет совместимости - нет проблем. Вот только ставишь тот же .NET 3.5 - и он тебе сажает все младшие версии. Самый проблемный пакет за всю историю. И самый жирный, надо признать. 350 мег. Хорошо, что в 4 версии от этого балласта, действительно, избавились.
Ты не понимаешь о чём я говорю.
Да, признаю, слегка не догнал, но теперь понял.
Решил проверить одну мысль: развернул семерку, посмотрел, как оно там. А вот там все очень даже цивильно и причесано:
Выводы неутешительны. Забаговали
Версии всё равно не связаны между собой. Насколько я помню, ты можешь использовать куски дотнетов других версий, но когда ты собираешь программу, для неё выбирается конкретная версия дотнета. Поскольку совместимости и использования общих кусков нет, нет ситуации, когда что-то поправили в версии 2, и программы, использующие версию 3 посыпались из-за непредсказуемых изменений в поведении.
Да, признаю, слегка не догнал, но теперь понял.
^^
Выводы неутешительны. Забаговали
Ну так. До второго сервиспака...
Эта логика, увы, похоже устарела. Если я все правильно помню, сервис-паков для десятки, как таковых, не будет. Они тупо новые билды выпускают. Равно как и сама по себе десятка - последняя версия ОС. Дальше ее планируют переименовать просто в Windows и менять "на лету".