Ubah waktu untuk sementara

18

Saya perlu menguji aspek perangkat lunak saya yang hanya terjadi pada waktu-waktu tertentu dalam sehari. Daripada menunggu sepanjang hari (dan sampai di sini jam 2:00), saya ingin mengubah waktu.

Tapi saya lebih suka tidak mengubahnya secara permanen .

Saya tahu saya bisa mengubah waktu menggunakan date, dan kemudian mengubahnya kembali, tetapi apakah ada cara yang lebih baik?

OS yang dimaksud adalah RHEL6 yang berjalan di VM.

John Dibling
sumber
Untuk apa nilainya, saya mengalami masalah sementara mengubah waktu di dalam VM saya, tetapi saya tidak punya masalah dengan sistem yang berdiri sendiri. Mungkin perlu membaca ini: Nonaktifkan Sinkronisasi Waktu di Ubuntu
GrandAdmiral

Jawaban:

24

Ada perpustakaan bernama libfaketime(juga di GitHub ) yang memungkinkan Anda membuat sistem melaporkan waktu tertentu ke aplikasi Anda. Anda dapat meminta sistem melaporkan waktu tetap selama durasi pelaksanaan program, atau memulai jam pada waktu tertentu (misalnya, 01:59:30). Pada dasarnya, Anda menghubungkan pustaka faketime ke dalam gambar di memori program Anda melalui pemuat perpustakaan, dan ia menangkap dan menangani dengan caranya sendiri semua panggilan sistem yang berhubungan dengan waktu sistem. Itu tidak benar-benar mengubah waktu sistem, tetapi itu mengubah waktu yang dilaporkan ke aplikasi spesifik Anda tanpa mempengaruhi hal lain yang sedang berjalan, yang mungkin adalah apa yang Anda cari (jika tidak, saya tidak melihat alasan untuk tidak hanya mengubah global waktu sistem).

Ada sejumlah varian yang mungkin tentang cara menggunakannya, tetapi sepertinya Mengubah waktu proses berpikir dengan libfaketime memiliki daftar yang cukup menyeluruh bersama dengan kode sampel untuk mencobanya. Google juga harus dapat menggali beberapa contoh mengingat Anda tahu apa yang harus dicari.

Tampaknya tidak tersedia dipaket melalui repositori RHEL, tetapi misalnya Debian menyediakannya dengan nama paketfaketime . Itu juga terlihat lurus ke depan untuk membangun dari kode sumber (tampaknya bahkan tidak memerlukan configurelangkah atau semacamnya).

sebuah CVn
sumber
1
Tidak ada prebuild di repo Fedora / CentOS / RHEL yang saya temukan. Ada RPM ini tersedia di sini tetapi perlu dibangun kembali untuk CentOS.
slm
@slm Kasihan, itu, tetapi seharusnya tidak sulit untuk membangun dari sumber (kata tanpa mencoba).
CVn
1
Tidak, aku hanya membiarkan semua orang tahu untuk menyelamatkan mereka dari melihat. Itu terlihat cukup lurus ke depan.
slm
6

Apa yang akan saya lakukan adalah menginstal ntplayanan untuk menyinkronkan waktu dengan server jarak jauh. Kemudian, hentikan layanan, ubah tanggal secara manual, mainkan dan mulai ulang layanan:

service ntpd stop
date -s "Aug 11 2012"
[ do stuff ]
service ntpd start
terdon
sumber
1
"Sejauh yang saya tahu, Anda tidak dapat mengubah waktu hanya untuk satu proses karena ini adalah masalah sistem." Sebenarnya, Anda bisa, dengan cara; lihat jawaban saya.
CVn
2
@ MichaelKjörling memang, tetapi pengetahuan saya pada saat penulisan tidak meluas ke jawaban Anda. Sejauh yang saya tahu tidak ada cara :).
terdon
Saya memposting jawaban saya sekitar 90 detik sebelum Anda memposting jawaban Anda. ;)
a CVn
1
@ MichaelKjörling ya, dan saya benar-benar mengedit milik saya (Anda tidak dapat melihatnya, itu dilakukan segera setelah memposting ketika saya melihat milik Anda) untuk menambahkan "sejauh yang saya tahu" :).
terdon