systemd
ผมวางแผนที่จะเป็นเจ้าภาพหลายกรณีของเว็บแอปเหมือนกันสำหรับลูกค้าที่ใช้ ผมอยากที่จะสามารถstop
และstart
ตัวอย่างลูกค้าแต่ละรายโดยใช้systemd
เช่นเดียวกับการรักษาเก็บทั้งกรณีลูกค้าเป็นบริการเดียวที่สามารถหยุดและเริ่มต้นด้วยกัน
systemd
ดูเหมือนว่าจะให้หน่วยการสร้างที่ฉันต้องการใช้PartOf
และไฟล์เทมเพลตหน่วย แต่เมื่อฉันหยุดบริการหลักบริการลูกค้าลูกจะไม่หยุด ฉันจะทำให้มันทำงานกับ systemd ได้อย่างไร นี่คือสิ่งที่ฉันมี
ไฟล์หน่วยหลักapp.service
:
[Unit]
Description=App Web Service
[Service]
# Don't run as a deamon (because we've got nothing to do directly)
Type=oneshot
# Just print something, because ExecStart is required
ExecStart=/bin/echo "App Service exists only to collectively start and stop App instances"
# Keep running after Exit start finished, because we want the instances that depend on this to keep running
RemainAfterExit=yes
StandardOutput=journal
ไฟล์เท็มเพลตหน่วยชื่อapp@.service
ใช้เพื่อสร้างอินสแตนซ์ของลูกค้า:
[Unit]
Description=%I Instance of App Web Service
[Service]
PartOf=app.service
ExecStart=/home/mark/bin/app-poc.sh %i
StandardOutput=journal
app-poc.sh
สคริปต์ของฉัน(พิสูจน์แนวคิดที่เพิ่งพิมพ์ไปยังล็อกไฟล์ในลูป):
#!/bin/bash
# Just a temporary code to fake a full daemon.
while :
do
echo "The App PoC loop for $@"
sleep 2;
done
เพื่อพิสูจน์แนวคิดฉันได้รับไฟล์ systemd unit ~/.config/systemd/user
แล้ว
ฉันจะเริ่มต้นผู้ปกครองและอินสแตนซ์ตามแม่แบบ (หลังsystemctl --user daemon-reload
):
systemctl --user start app
systemctl --user start app@customer.service
จากการใช้journalctl -f
ฉันจะเห็นว่าทั้งสองเริ่มต้นและอินสแตนซ์ของลูกค้ายังคงทำงาน ตอนนี้ฉันคาดว่าการปิดเครื่องพ่อแม่จะหยุดลูก (เพราะฉันใช้PartOf
) แต่ก็ไม่ได้ นอกจากนี้การเริ่มต้นผู้ปกครองไม่ได้เริ่มต้นลูกอย่างที่คาดไว้เช่นกัน
systemctl --user stop app
ขอบคุณ!
(ฉันใช้ Ubuntu 16.04 กับ systemd 229)
Requires=
แทนหรือไม่