Тимчасово змінити час


18

Мені потрібно перевірити аспекти мого програмного забезпечення, які трапляються лише в певний час доби. Замість того, щоб чекати цілі дні (і потрапляти сюди о 2:00), я хотів би змінити час.

Але я краще не назавжди міняти це .

Я знаю, що можу змінити час, використовуючи date, а потім знову змінити його, але чи є кращий спосіб?

ОС, про яку йде мова, RHEL6 працює в VM.


Оскільки це варто, у мене виникли проблеми тимчасово змінювати час всередині мого VM, але у мене не було проблем із автономною системою. Можливо, варто прочитати це: Вимкнути синхронізацію часу на Ubuntu
GrandAdmiral

Відповіді:


24

Існує бібліотека під назвою libfaketime(також на GitHub ), яка дозволяє зробити систему звітом заданий час для вашої програми. Ви можете або мати звіт системи за фіксований час протягом тривалості виконання програми, або запустити годинник у певний певний час (наприклад, 01:59:30). По суті, ви підключаєте бібліотеку факсимільного часу до образу пам'яті вашої програми через завантажувач бібліотеки, і вона фіксує та обробляє по-своєму всі системні виклики, які стосуються системного часу. Він точно не змінює системний час, але він змінює час, про який повідомляється у вашій конкретній програмі, не зачіпаючи нічого іншого, що працює, що, ймовірно, є тим, що ви насправді шукаєте (інакше я не бачу причин не просто змінювати глобальний системний час).

Існує ряд можливих варіантів того, як його використовувати, але схоже на те, що зміна часу, який вважає процес з libfaketime, має досить ретельний перелік разом із зразковим кодом для їх випробування. Google також повинен мати можливість виявити деякі приклади, враховуючи, що ви знаєте, що шукати.

Здавалося б, він недоступний заздалегідь упакований через сховища RHEL, але, наприклад, Debian надає його під назвою пакетаfaketime . Він також виглядає прямо вперед, щоб створити з вихідного коду (він, мабуть, навіть не потребує configureкроку чи нічого подібного).


1
Немає попередньої збірки цього в жодних репортах Fedora / CentOS / RHEL, які я міг би знайти. Тут доступний цей RPM, але його потрібно буде відновити для CentOS.
slm

@slm Вибачте, це, але це не повинно бути важко побудувати з джерела (сказав, не намагаючись)
CVn

1
Ні, я просто давав усім знати, щоб врятувати їх від вигляду. Це виглядає досить прямо вперед.
slm

6

Що б я зробив, це спочатку встановити ntpслужбу для синхронізації часу з віддаленим сервером. Потім зупиніть службу, вручну змініть дату, пограйте та перезапустіть службу:

service ntpd stop
date -s "Aug 11 2012"
[ do stuff ]
service ntpd start

1
"Наскільки я знаю, ви не можете змінити час лише на один процес, тому що це загальносистемна річ". Насправді, можна, певним чином; дивіться мою відповідь.
CVn

2
@ MichaelKjörling справді, але мої знання на момент написання не поширювались на вашу відповідь. Наскільки я знав , немає способу :).
terdon

Я опублікував свою відповідь приблизно за 90 секунд, перш ніж ви опублікували свою. ;)
CVn

1
@ MichaelKjörling yup, і я фактично відредагував шахту (ви не бачите цього, це було зроблено відразу після публікації, коли я побачив ваше), щоб додати "наскільки я знаю" :).
terdon
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.