ไฟล์ systemd unit ต้องโหลดใหม่เมื่อทำการแก้ไขหรือไม่?


138

สมมติว่าฉันเขียนmine.serviceไฟล์ systemctl enable mine.serviceแล้วฉันจะใช้

หากภายหลังฉันตัดสินใจที่จะแก้ไขmine.serviceฉันต้องบอกsystemdว่าmine.serviceมีการเปลี่ยนแปลงหรือไม่ ถ้าเป็นเช่นนั้นฉันจะทำอย่างไร

คำตอบ:


169

หลังจากที่คุณทำการเปลี่ยนแปลงแฟ้มหน่วยของคุณคุณควรใช้systemctl daemon-reloadที่ระบุไว้ที่นี่

daemon-reload
โหลดการกำหนดค่า systemd manager ใหม่ สิ่งนี้จะเรียกใช้กำเนิดใหม่ทั้งหมด (ดูsystemd.generator (7) ), โหลดไฟล์หน่วยทั้งหมดและสร้างต้นไม้ที่ขึ้นต่อกันทั้งหมด ในขณะที่ daemon กำลังโหลดใหม่ซ็อกเก็ต systemd ฟังในนามของการกำหนดค่าผู้ใช้จะสามารถเข้าถึงได้

จากนั้นคุณสามารถรีสตาร์ท (หรือโหลดซ้ำ) บริการของคุณตามที่คุณต้องการ

systemctl restart your-service-name

(daemon-reload จะไม่รีโหลด / รีสตาร์ทบริการด้วยตนเองเพียงทำให้ systemd รับรู้ถึงการกำหนดค่าใหม่)


2
ฉันพบว่าฉันยังจำเป็นต้องเรียกใช้systemctl restartเพื่อเริ่มบริการใหม่จริง ๆ ...
hwjp

3
ในกรณีที่daemon-reloadไม่เป็นสากลต้องเรียกใช้systemctl --user daemon-reloadสำหรับบริการผู้ใช้
Olegs Jeremejevs

โปรดทราบว่า "ลบการกำหนดค่าก่อนหน้านี้ที่สร้างโดยเครื่องกำเนิดไฟฟ้า" ก่อนทำการรันใหม่อีกครั้ง: freedesktop.org/software/systemd/man/systemd.generator.html
rogerdpack

8

นอกเหนือจากคำตอบข้างต้น: ในกรณีที่คุณเปลี่ยนบางสิ่งบางอย่างใน[Install]คำสั่งคุณอาจต้องเรียกใช้sudo systemctl reenable YOURUNITFILEเพื่อสร้าง symlink ในไดเรกทอรี. เป้าหมาย


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