Ускорить системное время на виртуальной машине

Для теста необходимо запустить программу и дождаться пока она проработает какое то время, скажем неделя, месяц…
Есть ли у какой либо системы, типа Virtual Box или Wm Ware, механизм ускорения системного времени?
На виртуалку я хочу установить сборку Linux.

http://www.virtualbox.org/manual/ch09.html#warpguest

Поделитесь пониманием идеи : программа должна отработать Х часов, но вы хотите фактически ускорить течение времени. Разве от этого программа отработает свои Х часов?

2 лайка

Скорее всего рассматриваются кейсы когда есть закрытие каких то периодов или частая отработка заданий по расписанию.

А то-есть ТС не совсем корректно сформулировал вопрос, думаете?

Тогда конечно вариант timeshift-а в virtualbox идеален для проверки контрольных точек.
Но почему не проставлять время самым банальным образом? есть существенные отличия?

Нужно было за короткий период времени, скажем неделя, смоделировать работу программы в течении месяца. Что бы в процессе работы выполнились все циклы работы.

Написать на powershell скрипт, который будет менять системное время на виртуальной машине. Время скачков выставить нужно будет в этом случае исходя из того, как часто ваша программа будет совершать опрос текущего времени.

в Poweshell быстрый гуглинг предлагает это:
Set-Date -Adjust (New-TimeSpan -Minutes 30) для смены времени на полчаса вперед.

Т.е. все сводится к написанию демон-скрипта, который в цикле с таймаутом будет менять системное время:

  • поменяли время на +30 минут
  • заснули на 1 минуту (или сколько времени требуется тестируемой программе чтобы начать записывать или осуществлять свою деятельность повторно)

Если нет знания Powershell, можно записать в .ps скрипт только эту строчку, а дальше вызывать этот скрипт через Python\Java\C# системным вызовом, например в Python:

daemon_current_time_changer.py

from os import popen
import sleep
while True:
    popen('powershell my_powershell_script.ps')  # Add up 30 minutes to system time 
    time.sleep(10)  # sleep for 10 seconds

Два замечания по работе с powershell и API windows:

  1. Win+R → Secpol.msc → Local Policies → Security options → User Account Control: Admin Approval Mode for the Built-in Administrator account - ставим в состояние Включено (Enabled). Для эскалации прав администратора.
  2. запускать скрипт от имени администратора:
    Можно запустить один раз “руками” скрипт демон на машине, если это не критично - самое простое решение в лоб.
    Если же это часть автотеста, то тут нужно будет, скорее всего, воспользоваться утилитой psexec
    Почитать про нее можно и скачать:
    PsExec | Microsoft Learn

где можно передать аргументы администратора и пароль. Помните, что вы, возможно, подвергаете тестовую систему опасности, если занесете в репозиторий тестов голый логин-пароль администратора для вашей тестовой машины.

связки psexec + powershell + (опционально: скриптовый язык) должно хватить с головой для решения этой задачи. Дерзайте.

p.s.
чтобы исключить сайд-эффекты и аномальное поведение, настоятельно рекомендуется в настройках виртуальной машины отключить синхронизацию времени с хостом.

1 лайк

Грубо, и скорее вредно - частота дискретизации в большинстве случаев заведомо неизвестна, период ожидания тоже. В лучшем случае будут пропущенные эвенты, в худшем - покусает watchdog или “обсыпет” тайм-аутами.