Похоже, вы действительно ищете способ запустить программу, чтобы программа думала, что она работает с другой датой и временем.
Ранее задавался вопрос об этом: аналог Linux RunAsDate? Ниже приведен ответ, который я дал там. Обратите внимание, что вы, кажется, пытаетесь вариант 3.
Пакет ntpdate
не является демоном и не должен обновлять системное время автоматически (он должен запускаться один раз при загрузке и не более). Я не слишком знаком с VirtualBox, но я предполагаю, что у вас либо установлен ntpd
либо гостевые дополнения VirtualBox синхронизируют время напрямую с хост-ОС, и в этом случае вам нужно отключить их или использовать один из них. библиотек-оболочек, указанных ниже в варианте 2.
Обновление: похоже на то, что VirtualBox Guest Additions устанавливает /usr/sbin/vboxadd-timesync
- я предполагаю, что это исполняемый файл, который синхронизирует гостевые часы с часами хоста. Проверьте, установлен ли сценарий запуска (возможно, /etc/init.d/vboxadd-timesync
); если это так, вы можете остановить синхронизацию с помощью sudo /etc/init.d/vboxadd-timesync stop
. Если нет сценария запуска, вы можете просто kill
процесс.
Что RunAsDate делает следующее:
RunAsDate перехватывает вызовы API ядра, которые возвращают текущую дату и время (GetSystemTime, GetLocalTime, GetSystemTimeAsFileTime), и заменяет текущую дату / время указанной вами датой / временем.
Под Linux у вас есть несколько вариантов, чтобы выполнить то же самое:
Если вы можете получить версию программы для Windows, вы можете запустить RunAsDate под Wine (но следите за недавней ошибкой).
Найдите для этого библиотеку-обертку или напишите свою. Некоторые варианты приведены ниже.
Используйте виртуальную машину. Это излишне, но, поскольку ОС в гостевой виртуальной машине полностью отделена от базового хоста, вы можете установить системное время на что-то совершенно другое. Это может быть быстрее настроить, чем другие параметры.
Вариант 2 может быть реализован разными способами, в зависимости от того, что вы пытаетесь запустить. Ответ DaveParillo ниже ссылается на самодельный подход, который объясняет различные методы и включает в себя код для исполняемого файла. Некоторые другие варианты включают в себя:
datefudge
, доступный в репозиториях Debian/Ubuntu и других местах.
Perl-модуль Time-Fake, также в репозиториях Debian как пакет libtime-fake-perl
.
Библиотека предварительной загрузки FakeTime (также известная как libfaketime
, ссылка на freshmeat), библиотека, которая может перехватывать системные вызовы в динамически связанных двоичных файлах. Доступно в репозиториях Debian для Squeeze и Sid.