launchd ควรที่จะรับเหตุการณ์ที่“ พลาด” หรือไม่?


4

ฉันอ่านว่าหากคอมพิวเตอร์เข้าสู่โหมดสลีปเมื่อเกิดเหตุการณ์เปิดตัว Launchd จะเรียกใช้เหตุการณ์เมื่อคอมพิวเตอร์ตื่นขึ้น

คำถามของฉันเกี่ยวกับคอมพิวเตอร์ที่ปิดตัวลง หากเครื่องปิดอยู่เมื่อมีเหตุการณ์การเปิดตัวเกิดขึ้นคือ launchd ควรจะทำงานในการเปิดเครื่องครั้งต่อไปหรือไม่?

ฉันถามเพราะฉันได้สร้างกิจกรรม (ตัวแทน?) ให้ทำงานเวลา 09:45 น. ทุกวัน แต่บ่อยครั้งที่เครื่องถูกปิดในเวลานั้น ฉันไม่เห็นผลลัพธ์ของเหตุการณ์ (อีเมลที่ถูกส่ง) หลังจากฉันเปิดคอมพิวเตอร์ ดังนั้นฉันจึงพยายาม จำกัด ให้แคบลงหากนี่คือพฤติกรรมโดยการออกแบบหรือฉันทำอะไรบางอย่างยุ่ง

คำตอบ:


4

มัน จำกัด เฉพาะงานที่กำหนดเวลาไว้ในโหมดสลีป (ไม่ใช่เมื่อปิดเครื่อง) และตามพารามิเตอร์ StartCalendarInterval (ไม่ใช่ StartInterval)

คู่มือการเขียนโปรแกรม Daemons and Services: การกำหนดเวลางาน

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

launchdงานอื่น ๆ ทั้งหมดจะถูกข้ามเมื่อคอมพิวเตอร์ปิดหรือหลับ พวกเขาจะไม่ทำงานจนกว่าจะถึงเวลาที่กำหนดต่อไป


1

อาจเป็นไปได้ว่าเหตุการณ์ล้มเหลวเนื่องจากมีการเรียกใช้ก่อนที่การเชื่อมต่ออินเทอร์เน็ตจะเสร็จสมบูรณ์

นี่คือข้อมูลบางส่วนจากบทความกำหนดการงานโดยใช้ launchd :

หากคอมพิวเตอร์ของคุณเข้าสู่โหมดสลีปบ่อยๆเครื่องจะทำงานเมื่อมีการเรียกใช้งานซึ่งหมายความว่าเครื่องจะทำงานทันทีเมื่อตื่นขึ้นก่อนที่จะเชื่อมต่ออินเทอร์เน็ต ฉันได้ทดลองกับKeepAliveและ NetworkStateเพื่อให้ได้งานทำซ้ำจนกว่าจะมีการเชื่อมต่อเครือข่าย คุณยังสามารถใช้SuccessfulExitเขียนสคริปต์เพื่อให้ส่งคืนโค้ดที่ไม่ใช่ศูนย์ให้หมายถึง“ ทำงานอีกครั้งใน 10 วินาที” วิธีใดวิธีหนึ่งจะทำให้สคริปต์ทำงาน (และอาจล้มเหลว) ทุก 10 วินาทีเมื่อคุณไม่มีการเชื่อมต่ออินเทอร์เน็ต ความคิดที่ดีกว่าคือการนอน 5 วินาทีในตอนเริ่มต้นสคริปต์ของคุณ หรือคุณสามารถเพิ่มความถี่การวิ่งและหวังให้ดีที่สุดได้

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