การเพิ่มการหน่วงเวลาระหว่างการหยุดและเริ่มกระบวนการใน systemd


10

systemdฉันมีปัญหาแปลกจริงๆกับ เมื่อฉันออกsystemctl restartมันจะเริ่มกระบวนการใหม่ก่อนที่กระบวนการก่อนหน้าจะเสร็จสิ้น

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

มีวิธีใดบ้างที่จะเพิ่มการหน่วงเวลาระหว่างการหยุดและการเริ่มต้นกระบวนการ?


ไม่มีอะไรหยุดคุณจากการวิ่งsystemctl stop myservice && sleep 3 && systemctl start myservice
don_crissti

ทำไมจึงแปลก มันเป็นคุณสมบัติการออกแบบที่จะปล่อยให้คุณอยู่คนเดียวเพื่อแก้ไขปัญหาในโลกแห่งความเป็นจริง ฉีดสลีปในหน่วยของคุณเริ่มต้นหรือใช้เงื่อนไข ExecPre เพื่อให้แน่ใจว่าอินสแตนซ์เก่าจะหายไปอย่างสมบูรณ์
Florian Heigl

คำตอบ:


13

ในไฟล์บริการ systemd ของคุณคุณสามารถตั้งค่าตัวเลือก RestartSec เพื่อเพิ่มความล่าช้าในการรีสตาร์ท ดูตัวอย่างด้านล่าง:

[Service]
Restart=always
RestartSec=30

ตรวจสอบลิงค์นี้สำหรับตัวอย่างเพิ่มเติม


1
afaik RestartSecใช้กับบริการที่กำหนดค่าด้วยRestart=คำสั่งเท่านั้นและจะไม่นำมาพิจารณาเมื่อทำ asystemctl restart someservice
don_crissti

1

RestartSec ดูเหมือนว่าจะถูกใช้เฉพาะเมื่อบริการเฉพาะนั้นเป็นบริการที่ถูกรีสตาร์ทผ่านคำสั่ง systemctl restart

ตัวอย่างเช่นฉันมีสองบริการ A และ B

[Unit]
Requires=network-online.target
[Service]
ExecStart=A-stuff
Restart=always

และ

[Unit]
Requires=A.service
After=A.service
[Service]
ExecStart=B-stuff
Restart=always
RestartSec=30

ถ้าคุณทำการ systemctl รีสตาร์ท B มันทำงานได้ตามที่คาดไว้ ... แต่ถ้าคุณทำการ systemctl รีสตาร์ท A ทั้งสองบริการจะหยุดและเริ่มต้นทันทีอีกครั้งโดยไม่ล่าช้า

เห็นได้ชัดว่า Systemd ใช้ค่าการกำหนดค่าสำหรับบริการเดียวที่คุณระบุและไม่สนใจการอ้างอิงใด ๆ

นี่ไม่ใช่เรื่องแปลกอย่างที่มันฟัง หาก B พูดคุยกับเซิร์ฟเวอร์ระยะไกลการเริ่มต้นและการหยุดอย่างรวดเร็วอาจล้มเหลวเนื่องจากปลายทางระยะไกลปฏิเสธลูกค้า แต่การรีสตาร์ท A โดยตรงจะเกิดขึ้นทุกครั้งที่มีการอัปเดตโดยไม่มีการเปลี่ยนแปลงเป็น B

คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยเพิ่มการหน่วงเวลาไปที่ A เช่นกัน แต่คุณไม่ควรทำเช่นนี้เพราะจะแยกการแยกวัตถุโดยทำให้ A รู้เกี่ยวกับ B เมื่อไม่ได้ขึ้นต่อกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.