ไทย

เครื่องมือสำหรับนักพัฒนา · ตัวสร้าง Crontab

เหตุใด cron จึงไม่มีเขตเวลา: เวลาท้องถิ่น CRON_TZ และคอนเทนเนอร์ใน UTC

· พื้นหลัง

cron โซนเวลา การกำหนดเวลา

สำนวนห้าช่องหนึ่งที่ชี้ไปที่นาฬิกาใน UTC โตเกียวและนิวยอร์ก
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

นิพจน์ cron ไม่มีเขตเวลา ดังนั้นฟิลด์ทั้งห้าที่เหมือนกันจึงหมายถึงช่วงเวลาที่แตกต่างกันบนโฮสต์ที่แตกต่างกัน โพสต์นี้อธิบายว่า clock cron ใดใช้ ส่วนขยาย CRON_TZ และเหตุใดคอนเทนเนอร์จึงเปลี่ยนคำตอบ

ฟิลด์เดียวกันจะสร้างการแสดงตัวอย่างทันทีที่แตกต่างกันเมื่อโซนที่เลือกเปลี่ยนแปลง

`0 9 * * *` มีหนึ่งชั่วโมงแต่ไม่มีตำแหน่ง ใน ToolAcre การเลือก UTC หรือ Asia/Tokyo จะปล่อยให้ทั้งห้าฟิลด์ไม่เปลี่ยนแปลง ในขณะที่เปลี่ยนช่วงเวลาที่แสดงโดยตัวเลือกนาฬิกาแขวนแต่ละตัวของ 09:00 รายงานจึงสามารถแสดงแยกกันหลายชั่วโมงเมื่อสภาพแวดล้อมทั้งสองตีความป้ายกำกับท้องถิ่นเดียวกันในโซนที่ต่างกัน

แผงทำให้การขึ้นต่อกันนี้ชัดเจนด้วยตัวเลือก "แสดงรายการวิ่งถัดไปใน" ใช้โซนของเครื่องที่ต้องการเมื่อตรวจสอบกำหนดการ จากนั้นบันทึกสมมติฐานนั้นข้างนิพจน์ การเลือกมีผลเฉพาะการแสดงตัวอย่างเบราว์เซอร์ มันไม่ได้ฝังอยู่ในข้อความ cron ที่คัดลอก

นิพจน์ไม่มีโซน ไม่ได้กำหนดค่าการเลือกนาฬิกา daemon ภายนอกที่นี่

มีข้อกำหนดเฉพาะของฟิลด์ทั้งหมดห้ารายการ โดยไม่มีการระบุเขตเวลา `nextRuns` ยอมรับโซนเป็นตัวเลือกแยกต่างหากและเป็นค่าเริ่มต้นสำหรับสภาพแวดล้อมโฮสต์ที่ JavaScript เห็น การแยกนี้พิสูจน์ว่าบริบทของโซนอยู่นอกนิพจน์ในแบบจำลองของ ToolAcre

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

การสนับสนุน CRON_TZ อยู่นอก parser นี้และไม่มีการอ้างสิทธิ์

`CRON_TZ` ไม่ถูกแยกวิเคราะห์ การป้อนลงในกล่องนิพจน์ล้มเหลวเนื่องจากไม่ใช่ห้าฟิลด์ และไม่มีการควบคุมต่อฟิลด์ที่เก็บคำสั่ง การกล่าวอ้างของเวิร์กบุ๊กว่าการใช้งานหนึ่งสนับสนุน ในขณะที่การใช้งานอื่นๆ ไม่ต้องการแหล่งที่มาที่ไม่ปรากฏที่นี่

หากเป้าหมายบันทึกคำสั่งเขตเวลา ให้กำหนดค่าและทดสอบที่นั่น อย่าคาดหวังว่า ToolAcre จะคงคำสั่งไว้เมื่อคัดลอกนิพจน์ เก็บข้อมูลเมตาของโซนไว้ติดกับกำหนดการจนกว่าการกำหนดค่าเฉพาะเป้าหมายจะได้รับการตรวจสอบและปรับใช้

ความหมายของสภาพแวดล้อม TZ ไม่ได้รับการสร้างแบบจำลอง

การมอบหมาย `TZ` อยู่นอกขอบเขตเท่ากัน เบราว์เซอร์ใช้ตัวเลือก `timeZone` ที่ชัดเจนสำหรับการจัดรูปแบบและการแปลง ไม่ใช่บรรทัดสภาพแวดล้อมภายในไฟล์ crontab ไม่สามารถบอกได้ว่าการมอบหมายเปลี่ยนแปลงการประเมินกำหนดเวลา เอาต์พุตคำสั่ง หรือไม่เปลี่ยนทั้งบนระบบอื่น

การแก้ไขนี้หลีกเลี่ยงสมมติฐานที่ละเอียดอ่อนแต่มีค่าใช้จ่ายสูง ชื่อที่คล้ายกันไม่ได้หมายความถึงบทบาทที่เหมือนกัน ปฏิบัติต่อการเลือกโซนของตัวกำหนดเวลาและสภาพแวดล้อมของกระบวนการเป็นคำถามที่แยกจากกัน และตอบทั้งสองอย่างจากการใช้งานเป้าหมาย แทนที่จะตอบจากตัวสร้างนิพจน์

ค่าเริ่มต้นของคอนเทนเนอร์และระบบคลาวด์จำเป็นต้องมีหลักฐานเป้าหมาย

คอนเทนเนอร์และอิมเมจคลาวด์ไม่ได้รับการตรวจสอบตามเส้นทาง ไม่มีการสอบถามซ็อกเก็ต Docker นาฬิกาโฮสต์ หรือบริการข้อมูลเมตา การอ้างว่าค่าเริ่มต้นเป็น UTC อาจเป็นจริงในการปรับใช้เฉพาะ แต่ไม่สามารถสรุปได้จาก `Intl.DateTimeFormat` ที่ทำงานอยู่ในเบราว์เซอร์ของผู้อ่าน

จับภาพโซนเป้าหมายจริงผ่านเครื่องมือและการกำหนดค่าที่บันทึกไว้ จากนั้นเลือกชื่อ IANA เดียวกันใน ToolAcre เมื่อพร้อมใช้งาน รายการโซนเบราว์เซอร์สะท้อนถึงสิ่งที่เครื่องยนต์รู้ ไม่ได้พิสูจน์ว่าเป้าหมายมีข้อมูลโซนหรือการตั้งค่าที่เหมือนกัน

ตัวอย่างการทำงาน: ดูตัวอย่าง 09:00 ในสองโซนที่เลือกโดยไม่มีการแปลงโค้ดตามฤดูกาลแบบฮาร์ดโค้ด

ให้ `0 9 * * *` คงที่และดูตัวอย่างหนึ่งผลลัพธ์ใน UTC จากนั้นใน America/New_York. แต่ละรายการจะแสดง 09:00 เป็นเวลาติดผนัง แต่ช่วงเวลาของยุคจะแตกต่างกันไปตามออฟเซ็ตโซนที่เกี่ยวข้อง หลีกเลี่ยงการเผยแพร่การแปลงชั่วโมงถาวรเนื่องจากการชดเชยภูมิภาคสามารถเปลี่ยนแปลงข้ามวันที่ได้

การทดสอบแสดงให้เห็นถึงหลักการนี้กับ UTC และโตเกียวตอนเที่ยงคืน และกับงานประจำวันในลอนดอนที่มีการเปลี่ยนแปลงไปข้างหน้า ใช้ผู้สมัครสดสำหรับวันที่ที่อยู่ระหว่างการพิจารณา หากการปรับใช้แปลงกำหนดการเป็น UTC ชั่วโมงคงที่ ให้บันทึกข้อจำกัดตามฤดูกาลแทนที่จะบอกเป็นนัยว่าค่าเดียวจะคง 09:00 ในเครื่องไว้ตลอดไป

DST การจัดการผู้สมัครถือเป็นพฤติกรรมการแสดงตัวอย่าง ToolAcre ไม่ใช่การรับประกัน daemon

ToolAcre สร้างผู้สมัครเป็นส่วนประกอบปฏิทินในเครื่องและแปลงผ่านข้อมูลโซนเบราว์เซอร์ เวลาไปข้างหน้าในฤดูใบไม้ผลิที่ไม่มีอยู่จะถูกละเว้น และชั่วโมงรายวันปกติยังคงเป็นชั่วโมงท้องถิ่นเดียวกันตลอดการเปลี่ยนแปลงที่ทดสอบ สิ่งเหล่านี้คือข้อเท็จจริงในการใช้งานตัวอย่าง

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

ประเด็นสำคัญ: กำหนดการจะเสร็จสมบูรณ์เฉพาะกับโซนของมัน — สร้างฟิลด์ในตัวสร้าง จากนั้นบันทึกโซนเวลาข้างๆ

กำหนดการไม่สมบูรณ์ในการปฏิบัติงานโดยไม่มีบริบทของโซน แม้ว่าฟิลด์ทั้งห้าฟิลด์จะเสร็จสมบูรณ์ทางไวยากรณ์ก็ตาม ToolAcre แสดงถึงความจริงนั้นโดยเก็บโซนไว้ในตัวเลือกแยกต่างหาก และแสดงรายการนาฬิกาแขวนที่เป็นผลลัพธ์ นิพจน์ที่คัดลอกเพียงอย่างเดียวไม่สามารถดำเนินการเลือกได้

บันทึกการแสดงออกและแบ่งโซนเข้าด้วยกัน ตรวจสอบการกำหนดค่าเป้าหมาย และตรวจดูผู้สมัครที่ใกล้กับการเปลี่ยนแปลงออฟเซ็ตอีกครั้ง เครื่องกำเนิดไฟฟ้าสร้างและอธิบายตารางเวลา ไม่ได้ตั้งค่านาฬิกาเซิร์ฟเวอร์ เขียนคำสั่งเขตเวลา หรือดำเนินการตามสัญญา ขอบเขตนั้นช่วยให้การแสดงตัวอย่างมีประโยชน์โดยไม่ต้องควบคุมเกินจริง