ยูนิตตัวจับเวลา systemd ข้ามการทำงานครั้งถัดไปหรือไม่ถ้ากระบวนการยังไม่เสร็จ


18

ฉันต้องการใช้ systemd เพื่อเรียกใช้คำสั่งทุก 5 นาที อย่างไรก็ตามมีความเสี่ยงที่บางครั้งงานอาจใช้เวลานานกว่า 5 นาทีในการทำงาน ณ จุดนั้น systemd จะเริ่มต้นอินสแตนซ์ที่สองของคำสั่งเช่นฉันจะจบลงด้วย 2 กระบวนการทำงาน?

เป็นไปได้ไหมที่จะบอกให้ systemd ไม่เริ่มกระบวนการที่สองหากกระบวนการแรกยังไม่เสร็จ? ถ้าไม่เป็นเช่นนั้น

หมายเหตุ: ฉันหวังว่าคำตอบคือ "นั่นเป็นพฤติกรรมเริ่มต้นมันไม่ได้บันทึกไว้" หากเป็นกรณีนี้มีใครช่วยบอกฉันถึงข้อบกพร่องของเอกสารได้หรือไม่?

หมายเหตุ: Cron มีปัญหาที่คล้ายกันซึ่งจะกล่าวถึงใน/unix//a/173928/11244 ฉันกำลังมองหาระบบที่เทียบเท่า

คำตอบ:


27

นี่คือพฤติกรรมเริ่มต้น (และเท่านั้น) มันไม่ได้บันทึกไว้อย่างชัดเจน แต่มีนัยโดยตรรกะการดำเนินงานของ systemd

อ่าน systemd.timer (5) :

สำหรับแต่ละไฟล์จับเวลา, ไฟล์หน่วยการจับคู่จะต้องมีอยู่อธิบายหน่วยเพื่อเปิดใช้งานเมื่อผ่านไปจับเวลา

ในทางกลับกันsystemd (1)อธิบายแนวคิดของหน่วยสถานะและช่วงการเปลี่ยนภาพระหว่างพวกเขา:

หน่วยอาจเป็น "ใช้งานอยู่" (หมายถึงเริ่มผูกมัดเสียบ ... ขึ้นอยู่กับประเภทของหน่วยดูด้านล่าง) หรือ "ไม่ใช้งาน" (หมายถึงหยุดหยุดถอดสายถอดปลั๊ก ... ) รวมทั้งใน กระบวนการเปิดใช้งานหรือปิดใช้งานคือระหว่างสองสถานะ (สถานะเหล่านี้เรียกว่า "การเปิดใช้งาน", "ปิดใช้งาน")

ซึ่งหมายความว่าการเรียกใช้ตัวจับเวลานำไปสู่ ​​"การเปิดใช้งาน" ของหน่วยการจับคู่นั่นคือการเปลี่ยนเป็นสถานะ "ใช้งานอยู่"

หากหน่วยการจับคู่นั้น "แอ็คทีฟ" ในขณะที่ "การเปิดใช้งาน" (สำหรับหน่วยบริการนี่หมายความว่า "กระบวนการหลักยังคงทำงานอยู่" ยกเว้นว่าหน่วยบริการจะมีType=oneshotและRemainAfterExit=true) ก็ควรจะเห็นได้ชัดว่าไม่มีการดำเนินการใด ๆ ยึด


คุณช่วยอธิบาย "oneshot" - บริการได้หรือไม่? ในมุมมองของฉัน "oneshot" - บริการไม่ควรเรียกใช้สำเนาอื่นภายใต้สถานการณ์ใด ๆ(manpage: กระบวนการต้องออกก่อนที่ systemd จะเริ่มหน่วยติดตาม)
Gima

1
@Gima หน่วย oneshot ที่ไม่มีพารามิเตอร์เพิ่มเติมใด ๆ จะถือเป็น "กำลังเปิดใช้งาน" ในขณะที่กระบวนการเริ่มต้นกำลังทำงานและจะกลายเป็น "ไม่ทำงาน" เมื่อออก ในขณะนี้ทริกเกอร์อื่นสามารถเปิดใช้งานหน่วยนั้นอีกครั้ง
intelfx

1
@Gima ... อย่างไรก็ตามยูนิต oneshot ที่RemainAfterExit=trueจะยังคง "แอ็คทีฟ" เมื่อกระบวนการเริ่มต้นออกดังนั้นการเรียกใช้ตัวจับเวลาในภายหลังจะถูกละเว้นเว้นแต่ผู้ดูแลระบบจะปิดการใช้งาน (หยุด) อย่างชัดเจนหรือถูกลบโดยลบ การอ้างอิง
intelfx

1
ฉันได้รับตัวแทนต่อไปเมื่อมีคนเชิญ ฉันหวังว่า systemd ไม่ได้อธิบายเอกสารของพวกเขา
TomOnTime

1
ตอนนี้เป็นส่วนหนึ่งของเอกสาร systemd - Note that in case the unit to activate is already active at the time the timer elapses it is not restarted, but simply left running. There is no concept of spawning new service instances in this case. freedesktop.org/software/systemd/man/systemd.timer.html
แซม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.