Cambia temporaneamente il tempo


18

Devo testare aspetti del mio software che si verificano solo in determinate ore del giorno. Invece di aspettare giorni interi (e arrivare qui alle 2:00), mi piacerebbe cambiare l'orario.

Ma preferirei non cambiarlo permanentemente .

So che posso cambiare il tempo usando date, e poi cambiarlo di nuovo, ma c'è un modo migliore?

Il sistema operativo in questione è RHEL6 in esecuzione in una macchina virtuale.


Per quello che vale, ho avuto problemi a cambiare temporaneamente il tempo all'interno della mia VM, ma non ho avuto problemi con un sistema autonomo. Potrebbe valere la pena leggere questo: disabilita la sincronizzazione dell'ora su Ubuntu
GrandAdmiral il

Risposte:


24

C'è una libreria chiamata libfaketime(anche su GitHub ) che ti consente di fare in modo che il sistema riferisca un determinato momento alla tua applicazione. È possibile fare in modo che il sistema riporti un orario fisso per la durata dell'esecuzione del programma o avviare l'orologio a un orario specifico (ad esempio, 01:59:30). Fondamentalmente, si aggancia la libreria faketime all'immagine in memoria del programma tramite il caricatore della libreria e acquisisce e gestisce a modo suo tutte le chiamate di sistema relative all'ora di sistema. Non cambia esattamente l'ora di sistema, ma cambia l'ora che viene comunicata alla tua specifica applicazione senza influire su qualsiasi altra cosa in esecuzione, che è probabilmente quello che stai realmente cercando (altrimenti, non vedo alcun motivo per non cambiare solo il globale ora di sistema).

Esistono diverse varianti su come usarlo, ma sembra che cambiare l'ora in cui un processo pensa che sia con libfaketime ha un elenco abbastanza completo insieme al codice di esempio per provarli. Google dovrebbe anche essere in grado di scoprire alcuni esempi dato che sai cosa cercare.

Sembrerebbe che non sia disponibile preimballato attraverso i repository RHEL, ma per esempio Debian lo fornisce sotto il nome del pacchettofaketime . Sembra anche semplice compilare dal codice sorgente (apparentemente non ha nemmeno bisogno di un configurepasso o qualcosa del genere).


1
Non c'è un pre-build di questo in nessun repository Fedora / CentOS / RHEL che ho trovato. Questo RPM è disponibile qui ma dovrà essere ricostruito per CentOS.
slm

@slm Peccato, quello, ma non dovrebbe essere difficile costruirlo dalla fonte (detto senza aver provato).
un CVn il

1
No, stavo solo facendo sapere a tutti di salvarli dallo sguardo. Sembra piuttosto semplice.
slm

6

Quello che vorrei fare è prima installare un ntpservizio per sincronizzare l'ora con un server remoto. Quindi, interrompere il servizio, modificare manualmente la data, giocare e riavviare il servizio:

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

1
"Per quanto ne so, non è possibile modificare il tempo per un solo processo perché è una cosa a livello di sistema." In realtà, puoi, in un certo senso; vedi la mia risposta.
un CVn il

2
@ MichaelKjörling in effetti, ma la mia conoscenza al momento della stesura non si è estesa alla tua risposta. Per quanto ne sapevo non c'era modo :).
terdon

Ho pubblicato la mia risposta circa 90 secondi prima che tu abbia pubblicato la tua. ;)
un CVn il

1
@ MichaelKjörling yup, e in realtà ho modificato il mio (non puoi vederlo, è stato fatto subito dopo la pubblicazione quando ho visto i tuoi) per aggiungere il "per quanto ne so" :).
terdon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.