เปลี่ยนเวลาชั่วคราว


18

ฉันต้องทดสอบด้านต่าง ๆ ของซอฟต์แวร์ของฉันที่เกิดขึ้นในบางช่วงเวลาของวันเท่านั้น แทนที่จะรอทั้งวัน (และมาที่นี่เวลา 2:00 น.) ฉันต้องการเปลี่ยนเวลา

แต่ผมไม่อยากเปลี่ยนไปอย่างถาวร

ฉันรู้ว่าฉันสามารถเปลี่ยนเวลาที่ใช้dateแล้วเปลี่ยนกลับมาอีกครั้ง แต่มีวิธีที่ดีกว่านี้ไหม

ระบบปฏิบัติการที่เป็นปัญหาคือ RHEL6 ที่ทำงานใน VM


สำหรับสิ่งที่คุ้มค่าฉันมีปัญหาในการเปลี่ยนเวลาชั่วคราวใน VM ของฉัน แต่ฉันไม่มีปัญหาใด ๆ กับระบบสแตนด์อะโลน มันอาจจะคุ้มค่าที่จะอ่านสิ่งนี้: ปิดใช้งานการซิงโครไนซ์เวลาบน Ubuntu
GrandAdmiral

คำตอบ:


24

มีห้องสมุดที่เรียกว่าlibfaketime(รวมถึงGitHub ) ซึ่งช่วยให้คุณสามารถทำให้ระบบรายงานเวลาที่กำหนดให้กับแอปพลิเคชันของคุณ คุณสามารถให้ระบบรายงานเวลาที่แน่นอนในช่วงระยะเวลาของการดำเนินการของโปรแกรมหรือเริ่มเวลาตามเวลาที่กำหนด (เช่น 01:59:30) โดยทั่วไปแล้วคุณติดตั้งไลบรารี faketime ไว้ในอิมเมจในหน่วยความจำของโปรแกรมของคุณผ่านตัวโหลดไลบรารีและมันจะดักจับและจัดการตามการเรียกของระบบทั้งหมดที่เกี่ยวข้องกับเวลาของระบบ มันไม่ได้เปลี่ยนแปลงเวลาของระบบอย่างแน่นอนแต่มันจะเปลี่ยนแปลงเวลาที่รายงานไปยังแอปพลิเคชันของคุณโดยไม่ส่งผลกระทบต่อสิ่งอื่นที่กำลังทำงานอยู่ซึ่งอาจเป็นสิ่งที่คุณเป็นอยู่จริงๆ (ไม่เช่นนั้นฉันไม่เห็นเหตุผลใด ๆ เวลาของระบบ).

มีหลายรูปแบบที่เป็นไปได้เกี่ยวกับวิธีการใช้ แต่ดูเหมือนว่าการเปลี่ยนแปลงเวลาที่กระบวนการคิดว่าเป็นกับ libfaketimeมีการแสดงรายการอย่างละเอียดพร้อมกับรหัสตัวอย่างเพื่อลองใช้ Google ควรจะสามารถค้นพบตัวอย่างบางอย่างเนื่องจากคุณรู้ว่าจะค้นหาอะไร

ก็ปรากฏว่ามันไม่สามารถใช้ได้ prepackaged ผ่านที่เก็บ RHEL แต่สำหรับตัวอย่างเช่นDebian faketimeให้ได้ภายใต้ชื่อแพคเกจ นอกจากนี้ยังมองไปข้างหน้าเพื่อสร้างจากซอร์สโค้ด (เห็นได้ชัดว่าไม่จำเป็นต้องมีconfigureขั้นตอนหรืออะไรทำนองนั้น)


1
ไม่มีสิ่งสร้างล่วงหน้าใน repos ของ Fedora / CentOS / RHEL ใด ๆ ที่ฉันหาได้ มีRPMนี้อยู่ที่นี่แต่จะต้องสร้างใหม่สำหรับ CentOS
slm

@slm Pity นั้น แต่ก็ไม่ควรยากที่จะสร้างจากแหล่งที่มา (พูดโดยไม่ต้องลอง)
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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.