ฉันมีภูตโรงเรียนเก่าที่ฉันต้องการควบคุมโดยใช้ systemd เมื่อไฟล์การกำหนดค่าเปลี่ยนแปลงจะต้องถูกฆ่าและรีสตาร์ท กล่าวอีกนัยหนึ่งหลังจากแก้ไขไฟล์ปรับแต่งแล้วsystemctl reload MYSERVICE
ควรจะทำให้กระบวนการหยุดทำงานและเริ่มต้นใหม่
ความพยายามที่ 1: ลองใช้ค่าเริ่มต้น สิ่งนี้บอกให้ systemd ทราบว่าจะเริ่มดีมอนได้อย่างไร แต่ไม่ใช่วิธีโหลดซ้ำ
[Service]
ExecStart=/usr/bin/MYSERVICE
Type=simple
เป็นผลstart
และrestart
ทำงานได้ แต่reload
ให้ข้อผิดพลาดนี้:
# systemctl reload MYSERVICE
Failed to reload MYSERVICE.service: Job type reload is not applicable for unit MYSERVICE.service.
พยายาม 2: บอกวิธีฆ่ากระบวนการ นี่เป็นการฆ่ากระบวนการ แต่ systemd ไม่รีสตาร์ทสำหรับฉัน
[Service]
ExecStart=/usr/bin/MYSERVICE
Type=simple
ExecReload=/bin/kill -HUP $MAINPID
...ติดตามโดย...
# systemctl daemon-reload
# systemctl reload MYSERVICE
... ฆ่ากระบวนการ แต่จะไม่เริ่มต้นใหม่โดยอัตโนมัติ
ความพยายามที่ 3: ใช้ ExecReload เพื่อเริ่มกระบวนการใหม่เช่นกัน สิ่งนี้ล้มเหลวด้วยเหตุผลบางประการ:
ExecReload=/bin/kill -HUP $MAINPID ; /usr/bin/MYSERVICE
... ข้อความแสดงข้อผิดพลาดที่ฉันได้รับ ... :
# systemctl daemon-reload
# systemctl reload MYSERVICE
Job for MYSERVICE.service failed because the control process exited with error code. See "systemctl status MYSERVICE.service" and "journalctl -xe" for details.
ฉันคาดหวังว่าจะมี ReloadType = kill_and_restart หรืออะไรบางอย่าง แต่ไม่มีโชคเช่นนั้น
จะบอก systemd ให้ฆ่าและรีสตาร์ท daemon เมื่อโหลดซ้ำได้อย่างไร