ฉันต้องการเรียกใช้สคริปต์บางอย่างเมื่อบริการล้มเหลว สิ่งที่ใกล้เคียงที่สุดที่ฉันเห็นคือFailureAction=
ตัวเลือก (ใต้[Service]
หัวข้อ) แต่มีเพียงคำสั่งรีบูต
ฉันต้องการเรียกใช้สคริปต์บางอย่างเมื่อบริการล้มเหลว สิ่งที่ใกล้เคียงที่สุดที่ฉันเห็นคือFailureAction=
ตัวเลือก (ใต้[Service]
หัวข้อ) แต่มีเพียงคำสั่งรีบูต
คำตอบ:
มีเป็นOnFailure=
คำสั่งในส่วน[Unit]
เอกสารในsystemd.unit (5) มันถูกกำหนดไว้ดังนี้:
รายการที่คั่นด้วยช่องว่างของหนึ่งหน่วยขึ้นไปที่เปิดใช้งานเมื่อหน่วยนี้เข้าสู่สถานะ "ล้มเหลว"
(นอกจากนี้ยังมีOnFailureJobMode=
คำสั่งในส่วนเดียวกันซึ่งอนุญาตให้ตั้งค่าโหมดงานสำหรับเปิดใช้งาน OnFailure = หน่วย)
/etc/systemd/system
และวางชื่อไว้ในOnFailure=
คำสั่ง
คุณยังสามารถใช้ExecStopPost
เพื่อเรียกใช้คำสั่งโดยตรงแทนการเริ่มหน่วย
ผมไม่ได้มีความสุขกับการตั้งค่าเพื่อให้ฉันเก็บไว้ดูและพบว่าOnFailure
ExecStopPost
ตัวอย่างจริงต่อไปนี้หากงานหลักล้มเหลว systemd จะเรียกใช้git
คำสั่ง
[Unit]
Description=SRI Dispenser Server
ConditionPathExists=|/usr/bin/
After=sri-boot-dsp.service
[Service]
WorkingDirectory=/usr/share/sri/configurations/transmitter
User=root
# This is task to run when this service starts
ExecStart=/usr/bin/python -m sri.DispenserServer
# If any of the ExecStart tasks fail, then ExecStopPost will run
ExecStopPost=/bin/git checkout -- .
Restart=always
RestartSec=10
KillSignal=SIGKILL
[Install]
WantedBy=multi-user.target
https://www.freedesktop.org/software/systemd/man/systemd.service.html
ExecStopPost = คำสั่งเพิ่มเติมที่ดำเนินการหลังจากหยุดให้บริการ ซึ่งรวมถึงกรณีที่มีการใช้คำสั่งที่กำหนดค่าใน ExecStop = โดยที่บริการไม่ได้กำหนด ExecStop = ไว้หรือมีการออกบริการโดยไม่คาดหมาย อาร์กิวเมนต์นี้ใช้หลายบรรทัดคำสั่งตามโครงร่างเดียวกับที่อธิบายไว้สำหรับ ExecStart = การใช้การตั้งค่าเหล่านี้เป็นทางเลือก สนับสนุนการแทนที่ตัวแปรตัวระบุและสภาพแวดล้อม โปรดทราบว่า - ซึ่งแตกต่างจาก ExecStop = - คำสั่งที่ระบุด้วยการตั้งค่านี้จะถูกเรียกใช้เมื่อบริการล้มเหลวในการเริ่มต้นอย่างถูกต้องและถูกปิดอีกครั้ง
ขอแนะนำให้ใช้การตั้งค่านี้สำหรับการดำเนินการล้างข้อมูลที่จะต้องดำเนินการแม้ว่าจะไม่สามารถเริ่มบริการได้อย่างถูกต้อง คำสั่งที่กำหนดค่าด้วยการตั้งค่านี้จะต้องสามารถใช้งานได้แม้ว่าบริการจะล้มเหลวในการเริ่มต้นครึ่งทางและปล่อยให้ข้อมูลเริ่มต้นไม่สมบูรณ์ เนื่องจากกระบวนการของบริการสิ้นสุดลงแล้วเมื่อคำสั่งที่ระบุด้วยการตั้งค่านี้ถูกดำเนินการจึงไม่ควรพยายามสื่อสารกับพวกเขา
โปรดทราบว่าคำสั่งทั้งหมดที่กำหนดค่าด้วยการตั้งค่านี้จะถูกเรียกใช้พร้อมกับรหัสผลลัพธ์ของบริการรวมทั้งรหัสทางออกและสถานะของกระบวนการหลักที่ตั้งค่าไว้ในตัวแปรสภาพแวดล้อม $ SERVICE_RESULT, $ EXIT_CODE และ $ EXIT_STATUS ดู systemd.exec (5) สำหรับรายละเอียด