คำถาม
ฉันต้องการที่จะสามารถเรียกใช้คำสั่งยูนิกซ์ได้อย่างแม่นยำทุกวินาทีในระยะเวลานาน
ฉันต้องการวิธีแก้ปัญหาซึ่งไม่ล่าช้าหลังเวลาใดเวลาหนึ่งเนื่องจากเวลาที่คำสั่งนั้นต้องการสำหรับการดำเนินการ การนอนหลับ , นาฬิกาและบางหลามสคริปต์ล้มเหลวฉันทั้งหมดในเรื่องนี้
ในไมโครคอนโทรลเลอร์เช่นhttp://Arduino.ccฉันจะทำเช่นนั้นผ่านการขัดจังหวะนาฬิกาฮาร์ดแวร์ ฉันต้องการที่จะรู้ว่ามีวิธีการแก้สคริปต์เปลือกแม่นยำเวลาที่คล้ายกัน โซลูชั่นทั้งหมดที่ฉันพบใน StackExchange.com ทำให้เกิดความล่าช้าเวลาที่เห็นได้ชัดเจนหากใช้งานเกินชั่วโมง ดูรายละเอียดด้านล่าง
วัตถุประสงค์ / การใช้งานจริง
ฉันต้องการทดสอบว่าการเชื่อมต่อเครือข่ายของฉันนั้นต่อเนื่องหรือไม่โดยการส่งการประทับเวลาผ่านnc
(netcat) ทุก ๆ 1 วินาที
ผู้ส่ง:
precise-timestamp-generator | tee netcat-sender.txt | nc $receiver $port
ผู้รับ:
nc -l -p $port > netcat-receiver.txt
หลังจากเสร็จสิ้นให้เปรียบเทียบบันทึกสองรายการ:
diff netcat-sender.txt netcat-receiver.txt
diffs จะเป็น timestamps ที่ไม่ถูกส่ง จากนี้ฉันจะรู้ว่าเวลาใดที่ LAN / WAN / ISP ของฉันสร้างปัญหา
แนวทางการนอนหลับ
while [ true ]; do date "+%Y-%m-%d %H:%M:%S" ; sleep 1; done | tee timelog-sleep.txt
รับออฟเซ็ตในช่วงเวลาหนึ่งเนื่องจากคำสั่งภายในลูปยังใช้เวลาเล็กน้อย
ความแม่นยำ
cat timelog-sleep.txt
2012-07-16 00:45:16
[...]
2012-07-16 10:20:36
วินาทีที่ผ่านไป: 34520
wc -l timelog-sleep.txt
บรรทัดในไฟล์: 34243
สรุปความแม่นยำ:
- 34520-34243 = ปัญหาเวลา 277
- 34520/34243 = 1.008 = ลด 0.8%
โซลูชัน REPEAT PYTHON
พบที่: ทำซ้ำคำสั่ง Unix ทุก ๆ x วินาทีตลอดไป
repeat.py 1 "date '+%Y-%m-%d %H:%M:%S'" >> timelog-repeat-py.txt
ควรหลีกเลี่ยงการชดเชยเวลา แต่ไม่สามารถทำได้
ความแม่นยำ
wc -l timelog-repeat-py.txt
2012-07-16 13:42:44
[...]
2012-07-16 16:45:24
วินาทีที่ผ่านไป: 10960
wc -l timelog-repeat-py.txt
บรรทัดในไฟล์: 10859
สรุปความแม่นยำ:
- 10960-10859 = ปัญหาการจับเวลา 101
- 10960/10859 = 1.009 = 0.9% ปิด
Solution WATCH
watch -n 1 "date '+%Y-%m-%d %H:%M:%S' >> ~/Desktop/timelog-watch.txt"
ความแม่นยำ
wc -l timelog-watch.txt
2012-07-16 11:04:08
[...]
2012-07-16 13:25:47
วินาทีที่ผ่านไป: 8499
wc -l timelog-watch.txt
บรรทัดในไฟล์: 8366
สรุปความแม่นยำ:
- 8499-8366 = 133 ปัญหาเรื่องเวลา
- 8499/8366 = 1.016 = 1.6% ปิด
nice
ทำกระบวนการที่หลับ