Időutazás a parancssorban: idő módosítás, program futtatás, majd vissza?!

Fórumok

Sziasztok!

(Elnézést azoktól, akik a cím alapján időutazás howto-t vártak.)

Az lenne a kérdésem, hogy mi a legjobb megoldás arra, ha Linux alatt a rendszeridőtől eltérő dátummal szeretnék egy programot lefuttatni (majd a kimenetéhez hozzáférni), mármint automatizáltan, meghívva.

Tehát például 2008.11.21.-én 12:34 perckor szeretnék lefuttatni valamit, parancssorból, hogy a program úgy lássa, hogy annyi az idő.

Ez úgy lenne az optimális, hogy a Linuxon futó alap szolgáltatások ne zavarodjanak meg esetlegesen, ha átállítom az időt.
Ha virtuális gépben csinálom, az biztos működne, mert például snapshotból indítom, átállítom a dátumot, lefuttatom a programot, majd kuka és visszaállás az eredeti snapshotra.

Esetleg konténerben docker-ben futtatva?

A másik, hogy elrakom, hogy most mennyi az idő, elindítok egy "stoppert", átállítom a rendszeridőt, majd a végén az elrakott dátum + az eltelt idő alapján visszaállítom, vagy még egyszerűbb, hogy ntp-vel visszaállítom.

A legésszerűbb, amit találtam:

libfaketime (FakeTime Preload Library) - report faked system time to programs without having to change the system-wide time

http://www.code-wizards.com/projects/libfaketime/

Ennek a hátránya, ha fix dátumot állítok be, akkor mindig változatlan időt mond, nem fog telni az idő. Persze ki lehet számolni, hogy mennyi a különbség a most és a futtatandó idő között, és beállítani azt.

Biztos van ezeknél egyszerűbb, elegánsabb módja, ugye? :)

Köszönöm előre is.

Hozzászólások

A libfaketime alapján nem tűnik vészesnek egy olyan megírása, aminek megadsz egy time offsetet, amit le kell vonni az aktuális időből.

Alapvetően két út áll előtted:
- libfaketime-jelleggel, az adott programoknak behazudni egy alternatív időt,
- az egész gépen (vagy VM-ben) átállítani az órát.

Ha licenszeléses dologról van szó (pl. valami lejáró demoverziót akarsz használni), akkor nem biztos, hogy az első megoldás elég lesz. Ugyanis ezek a fineszes köcsögök bizony nem hiszik el alapból az órát, hanem pl. szétnéznek a gépen, a hálózaton is. Mondjuk ha a /var/log-ban frisseb logokat látnak, akkor beintenek. Vagy ha a szoftver adatbázist használ, akkor lekérdezi az adatbázistól is az aktuális időt (esetleg indirekt módon, beírva SQL-ből egy táblába), és ott is meg lehet bukni. Nem utolsó sorban simán kikérdezhet valami Internetes site-ra, NTP szerverre, stb.

A VM-es dolognál arra figyelni kell, hogy pl. a Virtualbox alapból az agentjén keresztül szinkronizálja a hosthoz az időt, ergó vagy kikapcsolod ezt, vagy a hoston is át kell állítani az órát.