Score:1

งาน Cron ล่าช้าประมาณ 1 วินาที

ธง us

ฉันกำลังใช้งาน cron ต่อไปนี้

* * * * * วันที่ "+\%Y\%m\%dT\%H\%M\%S" > /path/to/log 2>&1

แต่มันทำงานช้าเกินไปประมาณหนึ่งวินาทีตามที่เขียนเช่น

20210817T210001

ฉันจะแน่ใจได้อย่างไรว่างาน cron จะทำงานเต็มนาที

RonJohn avatar
cn flag
ควรจะชัดเจน -- ด้วยความคิดเพียงเล็กน้อย -- ว่าต้องใช้เวลาสำหรับ cron ในการ "ปลุก" สแกน crontabs ทั้งหมด เพื่อพิจารณาว่าจำเป็นต้องรันรายการหรือไม่ นั่นคือความจริงอันโหดร้าย
Andrej Podzimek avatar
cn flag
หากคุณต้องการความแม่นยำในการจับเวลาประเภทนี้ ซึ่งอาจบ่งชี้ว่าเลือกซอฟต์แวร์ผิดสำหรับวัตถุประสงค์เฉพาะ เพียงใช้ตัวจับเวลา "systemd" แทนการตั้งค่า "cron" ที่ล้าสมัยโดยสิ้นเชิง ด้วยตัวจับเวลา `systemd` คุณจะได้รับปุ่มกำหนดค่าที่จำเป็นเพื่อสร้างสมดุลระหว่างความแม่นยำของเวลาและค่าใช้จ่ายในการสั่งจ่าย `AccuracySec` (ซึ่งสามารถมีค่าเป็น μs ได้หากจำเป็น) เป็นคำหลักสำหรับค้นหา [ในเอกสารประกอบ] (https://www.freedesktop.org/software/systemd/man/systemd.timer.html) นอกจากนี้ หากเป็นเรื่องเกี่ยวกับการบันทึกการประทับเวลาแบบกลมที่ดี เพียงแค่ปัดเศษการประทับเวลา
Score:12
ธง vn

นี้ยังครอบคลุมถึงที่ ความผิดพลาดของเซิร์ฟเวอร์.

ฉันชอบคำพูดนี้เป็นการส่วนตัว: "สิ่งที่ cron สามารถรับประกันได้คืองานของคุณจะเริ่มไม่เร็วกว่าเวลาที่กำหนด" กล่าวอีกนัยหนึ่ง cron ไม่ได้ออกแบบมาให้แม่นยำในการผ่าตัดถึงวินาที งาน cron ของฉันส่วนใหญ่จะเริ่มที่ 01 หรือแม้แต่ 02 วินาทีหลังจากเต็มนาที

เพื่อให้งาน cron เริ่มทำงาน cron จะสแกนงานที่ต้องเรียกใช้ในเวลาใดก็ตาม ไม่ใช่เรื่องผิดหากงานที่กำหนดให้เริ่มเวลา 12:00:00 น. จะเริ่มต้นจริงในเวลา 12:00:01 น. เนื่องจากระยะเวลาสำหรับ cron ในการเริ่มต้นอาจแตกต่างกันไป ขึ้นอยู่กับปัจจัยหลายประการ

หากคุณต้องการบางสิ่งบางอย่างที่จะเรียก "เกือบ" (ขอบคุณ Kevin) ในวินาทีที่แน่นอน คุณควรมองหาวิธีแก้ปัญหาอื่นที่ไม่ใช่ cron เช่น ระบบ ตัวจับเวลา (ขอบคุณ Andrej) สคริปต์ Python หรือแม้แต่โปรแกรม C ที่ตรวจสอบเวลาให้คุณ

แก้ไข: อีกวิธีหนึ่ง (ตามคำแนะนำของ Nonny Moose) คุณสามารถกำหนดเวลาให้สคริปต์ทำงานก่อนเวลาหนึ่งนาที จากนั้นตรวจสอบเวลาเพื่อให้รันได้อย่างแม่นยำที่สุดเท่าที่จะเป็นไปได้เมื่อคุณต้องการให้รัน

Irsu85 avatar
cn flag
จากนั้นคุณสามารถใช้ crontab เพื่อเรียกใช้สคริปต์นั้นเมื่อรีบูต
Artur Meinild avatar
vn flag
ใช่แน่นอน! :-)
Nonny Moose avatar
in flag
คุณยังสามารถให้ cron เริ่มโปรแกรมของคุณ พูดก่อนเวลาหนึ่งนาที จากนั้นเฝ้าดูเวลาอย่างต่อเนื่องจนกว่ามันจะทำงาน
ua flag
อวดรู้: คุณ *ไม่สามารถ* มีบางสิ่งที่ "ทริกเกอร์ในวินาทีที่แน่นอน" คุณกำลังทำงานภายใต้ระบบปฏิบัติการแบบมัลติทาสกิ้ง เคอร์เนลจะกำหนดเวลากระบวนการของคุณให้มี CPU เมื่อเคอร์เนลรู้สึกเช่นนั้น ไม่ใช่ในวินาทีที่แน่นอน หากคุณไม่ชอบ คุณจะต้องใช้ [sched(7)](https://man7.org/linux/man-pages/man7/sched.7.html) เพื่อขอการตั้งเวลาแบบเรียลไทม์ การรับประกันซึ่งยังไม่สมบูรณ์แบบเนื่องจากเคอร์เนลมีค่าใช้จ่ายการตั้งเวลาที่ไม่ใช่ศูนย์

โพสต์คำตอบ

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