ฉันจะโหลดกลุ่มบริการ systemd ใหม่ได้อย่างไร


12

ฉันต้องการโหลดใหม่ (ไม่ใช่รีสตาร์ท!) กลุ่มบริการตามเหตุการณ์

ตัวอย่างเช่นถ้าฉันอัปเดตใบรับรอง SSL ของฉันฉันต้องการให้บริการทุกอย่างที่ใช้พวกเขาโหลดใหม่ ( nginxและpostfixนึกถึง) ฉันไม่ต้องการจดจำบริการใดบนเซิร์ฟเวอร์ที่กำหนดให้ใช้ใบรับรอง SSL มันควรจะเพียงพอที่จะจัดกลุ่มเมื่อมีการกำหนดค่า

ในทางกลับกันฉันต้องการหลีกเลี่ยงการเปลี่ยนแปลง.serviceไฟล์ที่มาพร้อมกับแพ็คเกจเนื่องจากจะต้องมีการแทรกแซงด้วยตนเองระหว่างการอัพเดต

ฉันจะทำสิ่งนั้นให้สำเร็จได้อย่างไร

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


ฉันไม่แน่ใจว่าคุณปรับใช้ certs อย่างไร แต่ที่นี่ยังเป็น pre-hook และ post-hook สำหรับการต่ออายุอัตโนมัติส่วนใหญ่ /opt/letsencrypt/letsencrypt-auto renew --pre-hook "service nginx stop; service postfix stop; service squid stop" --post-hook "service nginx start; service postfix start; service squid start" เช่นกัน: certmonger มีคำสั่ง postave และ presave
Jacob Evans

@JacobEvans นั่นคือสิ่งที่ฉันใช้! ก่อนหน้านี้มีปัญหาในตัวแยกวิเคราะห์ไฟล์ปรับแต่งสำหรับ certbot: ไม่อนุญาตให้ใช้เครื่องหมายอัฒภาค ดังนั้นคุณต้องใช้อาร์กิวเมนต์บรรทัดคำสั่งหรือทำในครั้งเดียว ตอนนี้ทั้งหมดนี้ไม่จำเป็น
sanmai

หากคุณทำการ.serviceแก้ไขไฟล์เป็นการแทนที่คุณสามารถหลีกเลี่ยงปัญหาการอัปเดตได้ sudo systemctl edit foo.serviceจะจัดเก็บการเปลี่ยนแปลงของคุณ/etc/systemd/system/foo.service.d/override.confแทนที่จะแก้ไขfoo.serviceไฟล์ที่ติดตั้ง
quixotic

คำตอบ:


21

สร้าง/etc/systemd/system/ssl-reload.targetด้วยเนื้อหาดังต่อไปนี้

[Unit]
Description=Services which need reloaded with SSL certs are updated.
PropagatesReloadTo=nginx postfix

จากนั้นสร้างไฟล์อื่น: /etc/systemd/system/ssl-reload.path

[Unit]
Description=Restart services which use SSL when the cert directory changes

[Path]
PathChanged=/path/to/your/ssl/certs/dir

[Install]
WantedBy=multi-user.target

แล้ว:

systemctl enable ssl-reload.path
systemctl start ssl-reload.path

ด้วยที่กล่าวว่าหลังจากการเปลี่ยนแปลงบางสิ่งในไดเรกทอรี SSL ของคุณบริการที่ต้องการควรจะโหลดใหม่โดยอัตโนมัติ

หากคุณไม่ต้องการพฤติกรรมอัตโนมัติคุณไม่ควรใช้.pathไฟล์และออกsystemctl reload ssl-reload.targetเองหลังจากคุณเปลี่ยนไฟล์ SSL

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