ฉันได้อ่าน manpage บริการ systemd สองสามครั้ง แต่ฉันยังไม่สามารถหารูปแบบ systemd พื้นฐานได้:
ฉันต้องการเรียกใช้กระบวนการเริ่มต้นหนึ่งครั้ง (เช่นตัวเทียบท่าคอนเทนเนอร์หรือฟอร์แมตไดรฟ์) เมื่อเริ่มต้นระบบจนเสร็จสมบูรณ์ แต่ถ้าฉันใช้ Type = oneshot สำหรับสิ่งนั้นฉันไม่สามารถใช้ Restart = on-failure และถ้ามันล้มเหลวมันจะไม่ลองอีกครั้ง ฉันขาดอะไรบางอย่างชัดเจนที่นี่?
ฉันพยายามตั้งค่า Type = simple ด้วย Restart = on-failure แต่ในหลายกรณีฉันต้องการพฤติกรรมดังต่อไปนี้ (จาก manpage) ที่บริการ oneshot ให้:
พฤติกรรมของวัตถุที่คล้ายคลึงกันง่าย ๆ ; อย่างไรก็ตามคาดว่ากระบวนการจะต้องออกก่อนที่ systemd จะเริ่มหน่วยติดตาม
ปรับปรุง:
- ที่เกี่ยวข้องข้อผิดพลาด systemd ต้นน้ำ
- และเราต้องการ
RemainAfterExitความหมายเช่นกัน
Restart=โดยการตั้งค่าFailureAction=[self.unit](แทนที่ [self.unit] ด้วยชื่อของหน่วย) เป็นการแฮ็ก แต่อย่างน้อยก็ชัดเจนและง่ายต่อการติดตาม
FailureActionใช้ค่าเดียวกันกับStartLimitActionและทั้งหมดยกเว้นnoneทริกเกอร์การปิดบางประเภท
Restartและห่อmy_cmdเช่นนี้:ExecStart=/bin/sh -c 'while ! my_cmd; do sleep 1; done'พร้อมกับTimeoutStartSecค่าที่เหมาะสม