Остановите 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 у вас есть несколько вариантов, чтобы выполнить то же самое:

  1. Если вы можете получить версию программы для Windows, вы можете запустить RunAsDate под Wine (но следите за недавней ошибкой).

  2. Найдите для этого библиотеку-обертку или напишите свою. Некоторые варианты приведены ниже.

  3. Используйте виртуальную машину. Это излишне, но поскольку ОС в гостевой виртуальной машине полностью отделена от базового хоста, вы можете установить системное время на что-то совершенно другое. Это может быть быстрее настроить, чем другие параметры.


Вариант 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.

Другие вопросы по тегам