Мне нужно протестировать аспекты моего программного обеспечения, которые происходят только в определенное время дня. Вместо того, чтобы ждать целые дни (и приехать сюда в 2:00), я бы хотел изменить время.
Но я бы предпочел не менять его навсегда .
Я знаю, что могу изменить время с помощью date
, а затем снова изменить его, но есть ли лучший способ?
Рассматриваемая ОС - это RHEL6, работающий на ВМ.
Ответы:
Есть библиотека
libfaketime
(также на GitHub ), которая позволяет заставить систему сообщать приложению о заданном времени. Вы можете либо настроить системный отчет на фиксированное время на время выполнения программы, либо запустить часы в определенное время (например, 01:59:30). По сути, вы подключаете библиотеку faketime к образу вашей программы в памяти через загрузчик библиотеки, и она по-своему фиксирует и обрабатывает все системные вызовы, которые относятся к системному времени. Это точно не меняет системное время, но оно меняет время, сообщаемое вашему конкретному приложению, не затрагивая ничего, что работает, что, вероятно, то, что вы действительно ищете (в противном случае, я не вижу причин, чтобы просто изменить глобальное Системное время).Существует несколько возможных вариантов его использования, но похоже, что изменение времени, в которое процесс думает, с помощью libfaketime содержит довольно подробный список вместе с примером кода, чтобы опробовать их. Google также сможет найти некоторые примеры, если вы знаете, что искать.
Может показаться, что он недоступен, предварительно упакованный через репозитории RHEL, но, например, Debian предоставляет его под именем пакета
faketime
. Это также выглядит просто для сборки из исходного кода (по-видимому, даже не требуетсяconfigure
шаг или что-то в этом роде).источник
Что я хотел бы сделать, это сначала установить
ntp
службу для синхронизации времени с удаленным сервером. Затем остановите службу, вручную измените дату, поиграйте и перезапустите службу:источник