Tạm thời thay đổi thời gian


18

Tôi cần kiểm tra các khía cạnh của phần mềm của tôi chỉ xảy ra vào những thời điểm nhất định trong ngày. Thay vì chờ đợi cả ngày (và đến đây lúc 2:00 sáng), tôi muốn thay đổi thời gian.

Nhưng tôi không muốn thay đổi nó vĩnh viễn .

Tôi biết tôi có thể thay đổi thời gian sử dụng date, và sau đó thay đổi lại, nhưng có cách nào tốt hơn không?

Hệ điều hành được đề cập là RHEL6 đang chạy trong VM.


Về giá trị của nó, tôi đã gặp khó khăn khi tạm thời thay đổi thời gian bên trong máy ảo của mình, nhưng tôi không gặp vấn đề gì với hệ thống độc lập. Có thể đáng để đọc điều này: Vô hiệu hóa Đồng bộ hóa thời gian trên Ubuntu
GrandAdmirus

Câu trả lời:


24

Có một thư viện được gọi là libfaketime(cũng trên GitHub ) cho phép bạn làm cho hệ thống báo cáo một thời gian nhất định cho ứng dụng của bạn. Bạn có thể yêu cầu hệ thống báo cáo thời gian cố định trong thời gian thực hiện chương trình hoặc khởi động đồng hồ vào một thời điểm cụ thể (ví dụ: 01:59:30). Về cơ bản, bạn nối thư viện faketime vào hình ảnh trong bộ nhớ của chương trình thông qua trình tải thư viện, và nó nắm bắt và xử lý theo cách riêng của tất cả các cuộc gọi hệ thống liên quan đến thời gian hệ thống. Nó không thay đổi chính xác thời gian hệ thống, nhưng nó thay đổi thời gian được báo cáo cho ứng dụng cụ thể của bạn mà không ảnh hưởng đến bất kỳ thứ gì khác đang chạy, đó có thể là những gì bạn thực sự đang theo đuổi (nếu không, tôi thấy không có lý do gì để không thay đổi toàn cầu thời gian hệ thống).

Có một số biến thể có thể có về cách sử dụng nó, nhưng có vẻ như Thay đổi thời gian mà một quá trình nghĩ là với libfaketime có một danh sách khá kỹ lưỡng cùng với mã mẫu để thử chúng. Google cũng có thể khai quật một số ví dụ cho bạn biết cần tìm gì.

Có vẻ như nó không có sẵn được đóng gói sẵn thông qua các kho lưu trữ của RHEL, nhưng ví dụ Debian cung cấp nó dưới tên góifaketime . Nó cũng nhìn thẳng về phía trước để xây dựng từ mã nguồn (dường như thậm chí không cần một configurebước hoặc bất cứ điều gì tương tự).


1
Không có bản dựng sẵn này trong bất kỳ repos Fedora / CentOS / RHEL nào tôi có thể tìm thấy. Có RPM này có sẵn ở đây nhưng nó sẽ cần được xây dựng lại cho CentOS.
slm

@slm Đáng tiếc, điều đó, nhưng không khó để xây dựng từ nguồn (nói mà không cần thử).
một CVn

1
Không, tôi chỉ cho mọi người biết để cứu họ khỏi nhìn. Nó trông khá thẳng về phía trước.
slm

6

Những gì tôi sẽ làm trước tiên là cài đặt một ntpdịch vụ để đồng bộ hóa thời gian với một máy chủ từ xa. Sau đó, dừng dịch vụ, thay đổi ngày theo cách thủ công, chơi xung quanh và khởi động lại dịch vụ:

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

1
"Theo như tôi biết, bạn không thể thay đổi thời gian chỉ cho một quy trình vì đó là một việc trên toàn hệ thống." Trên thực tế, bạn có thể, theo một cách nào đó; xem câu trả lời của tôi
một CVn

2
@ MichaelKjorling thực sự, nhưng kiến ​​thức của tôi tại thời điểm viết không mở rộng cho câu trả lời của bạn. Theo tôi biết thì không có cách nào :).
terdon

Tôi đã đăng câu trả lời của mình khoảng 90 giây trước khi bạn đăng câu trả lời của bạn. ;)
một CVn

1
@ MichaelKjorling yup, và tôi thực sự đã chỉnh sửa của tôi (bạn không thể nhìn thấy nó, nó đã được thực hiện ngay sau khi đăng khi tôi thấy bạn) để thêm "theo như tôi biết" :).
terdon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.