Остановите Ubuntu от автоматического обновления времени
Мне просто нужно временно установить дату. Я запускаю это
date 051918002010.00
и он держится всего 5 секунд или около того. Затем он синхронизируется с сервером времени. Я пытался:
ps aux | grep ntp
но там ничего нет
Мне нужен правильный ответ сейчас, более подробный ответ позже:)
Изменить: Как быстро обнаружили ответчики, мой Ubuntu работает в VirtualBox, который оказался актуальным для некоторых версий ответа. Спасибо всем.
5 ответов
Похоже, вы действительно ищете способ запустить программу, чтобы программа думала, что она работает с другой датой и временем.
Ранее задавался вопрос об этом: аналог Linux RunAsDate? Ниже приведен ответ, который я дал там. Обратите внимание, что вы, кажется, пытаетесь вариант 3.
ntpdate
Пакет не является демоном и не должен обновлять системное время автоматически (он должен запускаться один раз при загрузке и не более). Я не слишком знаком с VirtualBox, но я думаю, вы либо получили ntpd
Установленные или гостевые дополнения VirtualBox синхронизируют время напрямую с хост-ОС, в этом случае вам необходимо отключить их или использовать одну из библиотек-оболочек, указанных ниже в варианте 2.
Обновление: похоже на установку гостевых дополнений VirtualBox /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
свежая ссылка), библиотека, которая может перехватывать системные вызовы в динамически связанных двоичных файлах. Доступно в репозиториях Debian для Squeeze и Sid.
Поскольку ваш комментарий к Дэну МакГу, кажется, указывает на то, что вы используете Ubuntu в качестве гостя VirtualBox, если вы установили гостевые дополнения VirtualBox, то они автоматически синхронизируют время гостя с временем хоста.
ps -ef | grep VBoxService
должен показать запущенную службу дополнений гостя VirtualBox.
Вы можете попробовать:
sudo /etc/init.d/vboxadd-service stop
остановить его до перезагрузки.
Вы также можете посмотреть на libfaketime, который упакован в Ubuntu/Debian.
Это позволяет вам подделывать системное время для программы без необходимости изменять системное время (перехватывая системные вызовы с помощью LD_PRELOAD)
Вы можете запустить VBoxManage setextradata <guest-vm-name> "VBoxInternal/Devices/VMMDev/0/Config/GetHostTimeDisabled" 1
on your host OS to disable automatic time sync.