cronds จัดการกับฤดูร้อนเวลาเปลี่ยน 1 ชั่วโมง


16

สุดสัปดาห์ที่แล้วเราต้องเปลี่ยนเวลาจาก 02:00 เป็น 03:00

คำถาม:จะเกิดอะไรขึ้นถ้ามี cronjob ในเวลา 02:30 น.

crond เป็นคำตอบที่เก่ามากสำหรับการตั้งเวลามันน่าจะจัดการได้ แต่ไม่รู้ว่าจะทำอย่างไร

คำตอบ:


18

มันอาจขึ้นอยู่กับการดำเนินการ cron ของคุณ แต่รัฐ Vixie cron ยอดนิยมในคู่มือ:

cron จะตื่นขึ้นมาทุกนาทีตรวจสอบ crontabs ที่เก็บไว้ทั้งหมดตรวจสอบแต่ละคำสั่งเพื่อดูว่าควรรันในนาทีปัจจุบันหรือไม่

และ

ข้อพิจารณาพิเศษมีอยู่เมื่อนาฬิกามีการเปลี่ยนแปลงน้อยกว่า 3 ชั่วโมงตัวอย่างเช่นที่จุดเริ่มต้นและจุดสิ้นสุดของการประหยัดเวลากลางวัน หากเวลาย้ายไปข้างหน้างานเหล่านั้นซึ่งจะทำงานในเวลาที่ถูกข้ามไปจะถูกเรียกใช้ในไม่ช้าหลังจากการเปลี่ยนแปลง ในทางกลับกันหากเวลาเคลื่อนไปข้างหลังน้อยกว่า 3 ชั่วโมงงานเหล่านั้นที่ตกอยู่ในเวลาซ้ำจะไม่ถูกเรียกใช้ซ้ำ

เฉพาะงานที่รันในเวลาเฉพาะ (ไม่ได้ระบุเป็น @hourly และไม่มีการระบุ '*' ในตัวระบุชั่วโมงหรือนาที) งานที่ระบุด้วย wildcards จะรันตามเวลาใหม่ทันที

เนื่องจากการเปลี่ยนแปลง DST น้อยกว่า 3 ชั่วโมงโปรแกรมของคุณจะทำงานหลังจาก 3:00 น

ฉันไม่แน่ใจว่านี่เป็นพฤติกรรมที่เฉพาะเจาะจงของ Vixie cron หรือไม่ฉันดูเหมือนจะจำได้ว่านี่เป็นวิธีที่ PDP-11 ของฉันทำงานได้ดีในยุค 80 แต่ฉันไม่แน่ใจ


2
ว้าวความรู้จากยุค 80 - ถอดหมวก!
Isaac

กฎของหัวแม่มือ: ปีละครั้ง crons ของคุณในช่วงเวลานั้นจะไม่ทำงาน ปีละครั้ง crons ของคุณจะทำงานสองครั้ง ข้อสรุป: สิ่งนี้ไม่เป็นความจริงเสมอไป เกี่ยวข้อง: หยุดใช้เขตเวลาท้องถิ่น!
tedder42

@ tedder42 โปรดให้ข้อมูลอ้างอิงการอ้างสิทธิ์ของคุณขัดแย้งกับทั้งเอกสารและพฤติกรรมที่แท้จริงของ cron
Anthon

ไม่จริง Anthon นั่นคือความสุขของการใช้งานที่แตกต่างกัน ต่อไปนี้เป็นคำแนะนำแบบรหัสของหนึ่งในการดำเนินงาน นี่เป็นกรณีเกร็ดเล็กเกร็ดน้อยที่เลวร้ายยิ่งกว่าที่ผมกล่าวถึง
tedder42

กรณีดังกล่าวเป็นการอ้างอิง 2am และ 3am และไม่มีความเกี่ยวข้องกับคำถาม (ซึ่งหมายถึง 2:30) pm ข้อมูลอ้างอิงของคุณอาจน่าสนใจ (เก่า) พฤติกรรมมันไม่สอดคล้องกับประสบการณ์ของฉัน และการรันเซิร์ฟเวอร์ที่ไม่มีเขตเวลามีปัญหาของตัวเอง
โธ

2

ทางออกที่ดีที่สุดคือให้คอมพิวเตอร์ของคุณทำงานโดยตั้งค่านาฬิกาฮาร์ดแวร์เป็น UTC, (เวลาสากลเชิงพิกัด), AKA GMT หรือเวลาซูลูและเปลี่ยนวิธีการแสดงเวลาโดยการตั้งค่าโซนเวลาท้องถิ่นเพื่อให้ประหยัดแสงในเวลากลางวัน เวลาที่จะครอบครอง

บน SUSE Linux และอื่น ๆ ส่วนใหญ่ถ้าระบบนาฬิกาฮาร์ดแวร์-> สภาพแวดล้อม -> นาฬิกา -> HWCLOCKถูกตั้งค่าให้ UTC กับธง -u แล้วและโซนเวลาของคุณมีการตั้งค่าที่คุณอยู่ระบบจะแสดงเวลาท้องถิ่นโดยอัตโนมัติ ด้วยการแก้ไข DST สำหรับคุณ

สิ่งนี้มีข้อดีหลายประการ:

  • คุณจะไม่ต้องปรับนาฬิกาด้วยตนเองสำหรับการเปลี่ยนแปลงเวลาอีกครั้ง
  • แท็บ CRON จะถูกจัดเก็บในและดำเนินการในเวลา UTC
  • หากไฟล์เช่นไฟล์บันทึกถูกเขียนไว้ที่ 01:30 ก่อนสิ้นสุดเวลา DST และอีกไฟล์หนึ่งที่ 01:20 หลังจากสิ้นสุดเวลา DST ไฟล์ดังกล่าวจะยังคง "ใหม่กว่า" กว่าไฟล์อื่นเพราะเวลาประทับของไฟล์จะเป็น UTC และ เพิ่งแปลเพื่อแสดงตามโซนเวลาปัจจุบัน ณ เวลาที่แสดง

สำหรับประเภทข้อมูลเพิ่มเติมman hwclockในเทอร์มินัล


2
nitpick เล็กน้อย UTC ไม่ใช่ "ค่าคงที่เวลาสากล" UTC หมายถึงเวลาสากลเชิงพิกัด
fpmurphy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.