ฉันได้อ่าน 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
ค่าที่เหมาะสม